使用异步等待时处理待处理的承诺

时间:2020-08-19 07:22:02

标签: javascript async-await es6-promise

我有两个计时功能-> getExcelFileStream和loadWorkbook

我希望函数结构仅在这两个子函数都执行后才返回响应(通过/失败)。 但是它总是返回一个promise未决子句。

async function parseToJson(data) {

    const excelFileStream = await getExcelFileStream(data.url);
    const dataRows = await loadWorkbook(excelFileStream, data.orgId);

    return dataRows;

}

exports.uploadExcel = function uploadExcel(data) {
    return parseToJson(data);
};

2 个答案:

答案 0 :(得分:0)

根据doc (语法>返回值)

一个Promise,它将由async函数返回的值来解决,或者被async函数抛出或未捕获的异常拒绝。

应该是

exports.uploadExcel = async function uploadExcel(data) {
  return await parseToJson(data)
}

答案 1 :(得分:0)

不可能在javascript中使异步代码同步,并且由于javascript是单线程的,因此您不能编写代码来等待promise,而不会阻塞处理promise本身的代码的执行。

我猜测您在调用函数uploadExcel时没有任何await.then(),因此您得到的是承诺而不是已解决承诺的价值

很遗憾,您只有两个选择:
1-让async/await在您的代码中一路传播
2-使所有代码同步,这将是一个非常糟糕的主意。