扫码关注官方订阅号
学习是最好的投资!
好问题!
首先,对于连续发送HTTP请求返回的肯定是很难保证顺序,因为一个请求的成功有很多因素会被影响响应的时间。
当然,最简单的还是需要让异步同时完成以后,再统一通知。
大概步骤应该是:
所有HTTP请求都以 Promise 对象返回。
Promise
使用 Promise.all() 将将多个Promise实例,包装成一个新的Promise实例。
Promise.all()
根据数据进行处理。
那么大概的代码差不多会是这样子:
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.下次不要贴图片,贴代码方便他人修改。2.不妨试试类似于操作系统多进程的实现方法:wait(signal),配合闭包,在callback里面加个无限循环直到顺序匹配执行后面的语句。3.同步请求或许可以替代异步。4.有这个需求的时候不妨回头看看代码是否需要重构以求更好的解决方案。
利用回调加递归吧,在回调函数里判断当前的index是否到达上限,是的话停止,否的话继续传入index+1参数执行 。
既然如此就用同步请求好了。。
或者用个队列,不知道JS有没有类似的框架,iOS的网络操作框架有这样的功能。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
好问题!
首先,对于连续发送HTTP请求返回的肯定是很难保证顺序,因为一个请求的成功有很多因素会被影响响应的时间。
当然,最简单的还是需要让异步同时完成以后,再统一通知。
大概步骤应该是:
所有HTTP请求都以
Promise对象返回。使用
Promise.all()将将多个Promise实例,包装成一个新的Promise实例。根据数据进行处理。
那么大概的代码差不多会是这样子:
1.下次不要贴图片,贴代码方便他人修改。
2.不妨试试类似于操作系统多进程的实现方法:wait(signal),配合闭包,在callback里面加个无限循环直到顺序匹配执行后面的语句。
3.同步请求或许可以替代异步。
4.有这个需求的时候不妨回头看看代码是否需要重构以求更好的解决方案。
利用回调加递归吧,在回调函数里判断当前的index是否到达上限,是的话停止,否的话继续传入index+1参数执行 。
既然如此就用同步请求好了。。
或者用个队列,不知道JS有没有类似的框架,iOS的网络操作框架有这样的功能。