Node JS承诺数组仍在<pending>

时间:2020-03-12 16:56:58

标签: javascript node.js asynchronous promise

我想在处理Promises之前对文件进行一些检查。

在使用Node JS时,由于它们都是独立的,所以我想异步进行所有验证。

但是,我想一次打印所有错误(如果有的话)以进行调试。因此,在执行其他任何操作之前,我需要等待所有操作完成。因此,我使用了异步/等待关键字。

这是我的代码:

async function isValid(file) {
         try {
            const check = [
                check1(file),
                check2(file),
                check3(file),
                check4(file),
                check5(file)
            ]

            let results = check.map(async checking => (await checking))
            console.log((await results));

         } catch(e) {
             console.log(e)
         }

}

问题是,console.log输出的内容如下:

[
  Promise { <pending> },
  Promise { <pending> },
  Promise { <pending> },
  Promise { <pending> },
  Promise { <pending> }
]

我期望得到的是checks()函数的结果,但是尽管多次出现await关键字,它们仍处于待处理状态。

你知道我在做什么错吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

我认为您想在此处使用Promise.all。实际上,您不必执行.map逻辑即可调用每个单独的函数并await。只要check(<file>)返回一个Promise,只需对其调用Promise.all

示例:

async function isValid(file) {
  try {
    const check = [
      check1(file),
      check2(file),
      check3(file),
      check4(file),
      check5(file)
    ]

    const results = await Promise.all(check);
    console.log('results', results);

  } catch (e) {
    console.log(e)
  }

}

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all