javascript - async/await och promise i TypeScript
Jag försöker förstå varför returtypen string i följande metod är understruken i rött som ett fel:
exportPageAsText(pageNumber: number): string {
(async () => {
const text = await this.pdfViewerService.getPageAsText(pageNumber);
console.log(text);
return text;
})();
}
Felmeddelandet lyder: En funktion vars deklarerade typ varken är 'void' eller 'any' måste returnera ett värde. så jag flyttade return text; utanför async-omfånget och placerade det efter })(); men det gjorde att text-variabeln blev oigenkännlig.
Sedan tänkte jag att det kanske beror på att metodens returtyp borde vara en Promise, så jag ändrade signaturen till:
exportPageAsText(pageNumber: number): Promise<string>
Men jag får ett nytt fel som säger att En funktion vars deklarerade typ varken är 'void' eller 'any' måste returnera ett värde.
Kan någon snälla hjälpa mig förstå vad jag gör fel?
Svar #1
Du vill använda await, så du behöver en asynkron funktion. Det du skapade är en självexekverande asynkron funktion. Men att returnera ett värde inuti den självexekverande funktionen returnerar det inte för basfunktionen.
Det du letar efter är att göra basfunktionen asynkron och sätta returtypen till Promise<string>:
async exportPageAsText(pageNumber: number): Promise<string> {
const text = await this.pdfViewerService.getPageAsText(pageNumber);
console.log(text);
return text;
}
Svar #2
Din metod väntar på en retur innan slutet men även löftet som deklareras av async() => {... returneras inte
så två saker att ändra i din kod
- returnera async()
- ändra typen av retur i metoddeklarationen till
Promise<string>
I ditt fall kommer syntaxen att se ut så
exportPageAsText(pageNumber: number): Promise<string> {
return (async () => {
const text = await this.pdfViewerService.getPageAsText(pageNumber);
console.log(text);
return text;
})();
}
