var ret=[]; for(i=0;i<6;i++){ ajax(/**/).sucess(function(res){ret.push(res)}); } console.log(ret);今天项目中遇到一个问题,就是同时要执行多个ajax请求,然后在汇总结果,但是由于js是异步的,还没请求完就汇总结果了,怎么办?
网友回复
可以实现promise实现,promise可以很优雅地实现并行和串行执行方式
var ret=new Array(); /** * 创建promise * @param {Number} value */ function makePromise (value) { return new Promise((resolve) => { $.ajax(success(function(res){ ret.push(res); resolve(value); })); }) } let promises = [1, 3, 4, 5, 6].map((item, index) => { return makePromise(item) }); // 并行执行 Promise.all(promises) .then(() => { console.log('done') }) .catch(() => { console.log('error') }) // 串行执行 let parallelPromises = promises.reduce( (total, currentValue) => total.then(() => currentValue.then(print)),Promise.resolve() ) parallelPromises .then(() => { // console.log('done') }) .catch(() => { console.log('done') }) // 顺带复习一下reduce方法 reduce((total, currentValue, currentIndex, arr) => {}, initialValue) let arr1 = [1, 2, 3, 4, 5] let res = arr1.reduce((total, currentValue, currentIndex, arr) => { return total + currentValue }); /** * 打印结果 * @param {Number} value */ function print (value) { return value }
uniapp开发的app或小程序如何将视频投屏?
如何在安卓虚拟机上安装使用chatgpt官方app?
微信小程序如何计入PayPal支付收款?
海外国际版微信小程序如何注册开发上架并开通海外支付收款?
uniapp怎么实现修改默认picker的选中颜色和确认按钮颜色样式?
uniapp怎么实现自定义nav导航条向上滚动导航条背景变色?
js如何生成随机用户昵称?
如何解决python print输出不显示缓冲问题?
python-docx创建Word文档报错ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes
python如何实时监控指定目录的文件增删改操作记录?