为了账号安全,请及时绑定邮箱和手机立即绑定

如何在js的for循环中,顺序执行异步请求。

如何在js的for循环中,顺序执行异步请求。

沧海一幻觉 2018-10-11 14:11:43
console.log(index)的时候 并不是按照顺序执行的 怎么变成顺序的
查看完整描述

1 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

好问题!

首先,对于连续发送HTTP请求返回的肯定是很难保证顺序,因为一个请求的成功有很多因素会被影响响应的时间。

当然,最简单的还是需要让异步同时完成以后,再统一通知。

大概步骤应该是:

  1. 所有HTTP请求都以 Promise 对象返回。

  2. 使用 Promise.all() 将将多个Promise实例,包装成一个新的Promise实例。

  3. 根据数据进行处理。

那么大概的代码差不多会是这样子:

function getInfo(info, index) {

  return new Promise((resolve, reject) => {

    // 使用settimeout模拟请求

    const ms = 1000 * Math.ceil(Math.random() * 3);

    setTimeout(() => {

      // get(info).save().then(data => { resolve(index); })

      resolve(index);

    }, ms);

    console.log(`${index} time: ${ms}`);

  });

}


let promises = [1, 2, 3].map((item, index) => {

  let info = {};

  return getInfo(info, index);

});


Promise.all(promises).then((allData) => {

  console.log(allData);

  // [0, 1, 2]

}).catch((err) => {

  console.log(err);

})


查看完整回答
1 反对 回复 2018-11-30
  • 1 回答
  • 0 关注
  • 4040 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信