热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

等待一个提取完成,然后再开始下一个

如何解决《等待一个提取完成,然后再开始下一个》经验,为你挑选了1个好方法。

我有要发送到Google Cloud的数据列表。我当前的代码如下所示:

const teams = ['LFC', 'MUFC', 'CFC'];

teams.forEach(team => {
    fetch({
      url: URL,
      method: 'PUT',
      body: team
    });
})

这适用于一个,team但是如果发送多个文件并且文件更大,则会超时。我正在发送图像而不是字符串。为了解决这个问题,我需要POST一个文件一个数据,并等待前一个文件POST完成后再发送下一个文件。谁能建议最好的方法?

值得注意的是,我对上载的文件数量没有任何控制。



1> FZs..:

使用reduce的,而不是forEach.then()

以下代码将存储最后一个fetch入栈acc(的累加器参数reduce)的承诺,并将新的内容附加到侦听器fetch内部then,以确保前一个fetch已完成:

const teams = ['LFC', 'MUFC', 'CFC'];

teams.reduce((acc,team) => {
    return acc.then(()=>{
      return fetch({
        url: URL,
        method: 'PUT',
        body: team
      });
    })
}, Promise.resolve())
.then(()=>console.log("Everything's finished"))
.catch(err=>console.error("Something failed:",err))

//Simulate fetch:
const fetch = team => new Promise(rs => setTimeout(() => {rs();console.log(team)}, 1000))

const teams = ['LFC', 'MUFC', 'CFC'];

teams.reduce((acc, team) => {
  return acc.then(() => {
    return fetch({
      url: URL,
      method: 'PUT',
      body: team
    });
  })
}, Promise.resolve())
  .then(() => console.log("Everything's finished"))
  .catch(err => console.error("Something failed:", err))

推荐阅读
author-avatar
波猫小丝992
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有