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

查看:82
本文介绍了javascript - 如何在js的for循环中,顺序执行异步请求。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

console.log(index)的时候 并不是按照顺序执行的 怎么变成顺序的

解决方案

好问题!

首先,对于连续发送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);
})

这篇关于javascript - 如何在js的for循环中,顺序执行异步请求。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆