Node JS 承诺数组仍在<pending>



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

当我使用NodeJS时,我想异步地进行所有验证,因为它们都是独立的。

但是,为了调试的目的,我想一次打印所有的错误(如果有的话(。所以我需要等待所有的手术完成后再做其他事情。所以我使用async/wait关键字。

这是我的代码:

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((函数的结果,但尽管wait关键字多次出现,它们仍然处于挂起状态。

你知道我做错了什么吗?

提前谢谢。

我想您想在这里使用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

相关内容

最新更新