首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复此foreach循环以匹配索引

如何修复此foreach循环以匹配索引
EN

Stack Overflow用户
提问于 2018-08-24 00:42:07
回答 1查看 59关注 0票数 0

我正在使用firebase存储桶保存文件,并将它们的下载链接保存到数据库中。

除了在我执行foreach循环(_lodash)后文件索引被混淆之外,一切都应该正常工作。

代码语言:javascript
复制
getFiles(e){
  this.outPutFiles = e;
    _.each(this.outPutFiles, ((file) => {
      const ref = this._storage.ref(file);
      return  ref.getDownloadURL().subscribe(url => this.img_array.push(url));
    }));
}

预期行为应为:

代码语言:javascript
复制
this.outPutFiles = [
0:"o-t-status-files/.....Qd5bGm"
1:"o-t-status-files/.....dz2bd8"
]

代码语言:javascript
复制
this.img_array = [
0:"https://firebase....%2FJ6Qx9........Qd5bGm"
1:"https://firebase....%2FJ6Qx9........dz2bd8"
]

不幸的是,有时this.img_array中的文件索引与this.outPutFiles变量上的索引中的文件不匹配。

例如,this.img_array可能会变成这样...

代码语言:javascript
复制
this.img_array = [
    0:"https://firebase....%2FJ6Qx9........dz2bd8"
    1:"https://firebase....%2FJ6Qx9........Qd5bGm"
    ]

索引0处的文件已移至索引1,索引1处的文件已移至索引0。

如何防止出现这种情况,以确保this.outPutFilesthis.img_array数组中的文件索引都匹配?

EN

回答 1

Stack Overflow用户

发布于 2018-08-24 01:20:31

原因ref.getDownloadURL()是异步的,因此outPutFiles[1].getDownloadURL()可能会完成之前的outPutFiles[0].getDownloadURL()

尝试如下操作(或使用rxjs操作符):

代码语言:javascript
复制
Promise.all(_.map(this.outPutFiles, file => this._storage.ref(file).getDownloadURL()))
  .then(img_array => console.log(img_array))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51990598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档