【问题标题】:Typescript Function returns before promise.all finishesTypescript 函数在 promise.all 完成之前返回
【发布时间】:2023-02-23 07:46:44
【问题描述】:

我有一个代码如下

export class MyHandler {
    entry = async (data: string[]): Promise<Map<string, string>> {
        const response: Map<string, string> = new Map();
        Promise.all(
            data.map(async (item) => {
                const apiGetDataRequest = {
                    data: item
                };
                const apiGetDataResponse = await this.client.apiCall(apiGetDataRequest);
                return apiGetDataResponse.data;
            });
        ).then((results) => {
            for (const result of results) {
                const value = myFirstMethod([1, 2, 3]);
                response.set(result, value);
            }
        });

        return response;
    };

    myFirstMethod = (items: number[]): string {
        const result = mySecondMethod(items, 'Test');
        console.log(result);
        return result;
    };

    mySecondFunction = (items: number[]): string {
        let finalResult = "";
        Promise.all(
            items.map(async (item) => {
                const apiCallRequest = {
                    data: item
                };
                const apiCallResponse = await this.client.apiCall(apiCallRequest);
                return apiCallResponse.data;
            });
        ).then((results) => {
            for (const result of results) {
                finalResult = finalResult + ', ' + result;
            }
        });

        return finalResult;
    };
}

我遇到的问题是 mySecondFunction 在完成所有承诺之前返回,结果 myFirstMethod 中的 result 始终具有空字符串值。

我怎么能让mySecondFunction在返回之前等待所有的承诺?

【问题讨论】:

    标签: typescript async-await promise promise.all


    【解决方案1】:

    mySecondFunction方法是同步的,你需要在Promise.allawait

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-10
      • 2020-09-26
      • 2015-02-17
      • 1970-01-01
      • 1970-01-01
      • 2018-04-05
      相关资源
      最近更新 更多