Javascript 节点JS承诺数组仍在<;待定>;
在处理之前,我想检查一下有承诺的文件 在使用NodeJS时,我希望异步执行所有验证,因为它们都是独立的 但是,为了调试的目的,我想一次打印所有错误(如果有)。所以我需要等待所有的操作完成,然后再做其他的事情。所以我使用了async/wait关键字 这是我的密码:Javascript 节点JS承诺数组仍在<;待定>;,javascript,node.js,asynchronous,promise,Javascript,Node.js,Asynchronous,Promise,在处理之前,我想检查一下有承诺的文件 在使用NodeJS时,我希望异步执行所有验证,因为它们都是独立的 但是,为了调试的目的,我想一次打印所有错误(如果有)。所以我需要等待所有的操作完成,然后再做其他的事情。所以我使用了async/wait关键字 这是我的密码: async function isValid(file) { try { const check = [ check1(file),
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关键字多次出现
你知道我怎么了吗
提前谢谢。我想你要用
承诺。全部在这里。实际上,您不必执行.map
逻辑来调用每个单独的函数并等待它。只要check()
返回一个Promise
,只需调用Promise.all
例如:
异步函数有效(文件){
试一试{
常量检查=[
检查1(文件),
检查2(文件),
检查3(文件),
检查4(文件),
检查5(文件)
]
const results=等待承诺。全部(检查);
console.log('results',results);
}捕获(e){
控制台日志(e)
}
}
async
和map
不会执行您想要的操作。您仍然需要Promise.all
whatmap
返回。如果您真的想打印所有错误,您应该使用。感谢您的建议,他们给了我一个很好的提示:)我在当前上下文中使用了另一种方法,但是将注意这些用于其他用途的命令。OP想要我想一次打印所有错误
,您的解决方案只显示第一个错误谢谢,这个解决方案实际上帮助了我。我手动处理错误,因为我的承诺是以{success:false,reason:'bad_file_type'}
的形式记录的。不过我不确定这是不是一个好的练习