I am trying to understand why the return type string
in the following method is underlined red as error:
exportPageAsText(pageNumber: number): string {
(async () => {
const text = await this.pdfViewerService.getPageAsText(pageNumber);
console.log(text);
return text;
})();
}
The error message reads: A function whose declared type is neither 'void' nor 'any' must return a value.
so I moved return text;
out of the async
scope and placed it after })();
but that made the text
variable unrecognizable.
Then I thought maybe it's because the method return type should be a Promise
so I changed the signature to:
exportPageAsText(pageNumber: number): Promise<string>
But I get a new error saying that A function whose declared type is neither 'void' nor 'any' must return a value.
Can someone please help me understand what I am doing wrong?
CodePudding user response:
You want to use await
, so you need an async function. What you created is a self-invoking async function. But returning a value inside the self-invoking function does not return it for the base function.
What you are looking for is to make the base function async, and setting the return type to Promise<string>
:
async exportPageAsText(pageNumber: number): Promise<string> {
const text = await this.pdfViewerService.getPageAsText(pageNumber);
console.log(text);
return text;
}
CodePudding user response:
Your method wait a return before the end but event the promise declared by async () => {... is not returned
so two thing to change in your code
- return the async()
- change the type of return in the methode declaration by
Promise<string>
In your case syntax it will look like
exportPageAsText(pageNumber: number): Promise<string> {
return (async () => {
const text = await this.pdfViewerService.getPageAsText(pageNumber);
console.log(text);
return text;
})();
}
CodePudding user response:
This is how I would have done it. async/await.
const exportPageAsText = async (pageNumber: number): Promise<string> => {
const text: string = await this.pdfViewerService.getPageAsText(pageNumber);
console.log(text);
return text;
}
CodePudding user response:
You want to use await, so you need an async function. What you created is a self-invoking async function. But this way you can't return anything.
What you are looking for is to make the base function async, and setting the return type to Promise:
exportPageAsText(pageNumber: number): Promise<string> {
return (async () => {
const text = await this.pdfViewerService.getPageAsText(pageNumber);
console.log(text);
return text;
})();
}