1 回答
TA贡献1877条经验 获得超1个赞
尽量弄清楚你是想要一个承诺,还是要解决的结果
在您的第一个代码块中,您正确地打算组装一个承诺列表,以便您可以将它们与 a 合并Promise.all,然后等待整个结果,与await.
但是,在我看来,您不小心await在内部函数(在.map)内分别对每个 promise 进行了处理,因此输入的数组Promise.all不再是一个 promise 数组。
而不是这个:
await Promise.all(files.map(
async (file) => {
let url= await uploadFileAndSave(req, file);
await saveFileDB(file,url);
// This inner function "async (file) => ..." does not
// have a `return` statement, so it returns `undefined`, rather than
// the promise you intended to return. This is because you `await`ed
// the promise already, rather than `return`ing it to the outer loop.
}
))
我建议这样做:
await Promise.all(files.map(
async (file) => {
let url= await uploadFileAndSave(req, file);
return saveFileDB(file,url);
// Now the inner "async (file) =>" function returns
// a promise (because that is the result type of saveFileDB)
}
))
作为文体问题,您可能还想将“let url =”更改为“const url =”。每当您知道您正在创建一个变量,其值在被销毁之前不会改变时,将其标记为const. 这在调试时(例如,在代码变长之后)对读者和您自己都有帮助,而且当您尝试重新分配它时,Javascript 甚至您的代码编辑器都会警告您。
添加回答
举报