我想在处理文件之前使用 Promises 对文件进行一些检查。
由于我使用 Node JS,我希望异步执行所有验证,因为它们都是独立的。
但是,我想一次打印所有错误(如果有的话)以进行调试。所以我需要等待所有操作完成后再做其他事情。所以我使用 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()函数的结果,但尽管await关键字多次出现,它们仍然处于待处理状态。
你知道我做错了什么吗?
提前致谢。
最佳答案
我想你想使用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
关于javascript - Node JS 的 Promises 数组仍处于 <pending> 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60658656/