.then()承诺块不适用于await

时间:2019-10-02 07:14:33

标签: javascript reactjs firebase promise async-await

我正在使用以Firebase为后盾的React。我正在使用异步firebase函数来获取我添加的文件的下载URL。此函数在for循环内运行多次,并保持所有同步,我使用'async'和'await'等待文件添加,然后再进入循环中的下一个条目。但是最后,我要填充的数组“上载”在整个循环完成后变为空。是不是因为等待在里面而没有用。如果没有,我该怎么办?

OnChanged

2 个答案:

答案 0 :(得分:0)

使用for await ... of语句,而不要使用其他任何用于循环的语句。这将使每次迭代中的promise都可以解决,然后再进行下一次。

// I guess from your code that you're iterating through a FileList? Could be an array or any sort of list.
for await (file of files) {
  // ...
}

答案 1 :(得分:0)

问题在于forEach( ... )不能await来完成诺言:它会遍历您的条目并启动n个诺言,而在您{之前{ {1}}。我正在重写您的resolve和函数调用,以使其以更加惯用的async / await样式起作用:

fs.collection("wall_posts").add(...)