简体   繁体   中英

async/await and promise in TypeScript

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?

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;
}

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

  1. return the async()
  2. 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;
    })();
}

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;
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM