循环ajax请求 then,用promise.all解决ajax异步循环请求问题

本文通过示例展示了如何使用JavaScript的Promise和async/await处理异步操作,包括Promise.all()的使用以及循环依赖调用。文章中详细解释了如何在异步函数中嵌套使用setTimeout来模拟ajax请求,并演示了如何通过generator函数实现异步流程控制。
摘要由CSDN通过智能技术生成

-----补充

var promises = [1,2,3].map(function (id) {

return setTimeout(()=>{console.log(id)},1000);

});

Promise.all(promises).then(function (posts) {

console.log('all r')

}).catch(function(reason){

});

// 输出 'all r', 1, 2, 3

ajax 的循环依赖调用可以这么写,接住异步函数

function ajax1 () {

return new Promise(function (resolve, reject){

console.log("执行:ajax1,执行2s")

setTimeout(()=>{resolve('ajax1');},2000);

});

}

function ajax2 () {

return new Promise(function (resolve, reject){

console.log("执行:ajax2,执行1s")

setTimeout(()=>{resolve('ajax2');},1000);

});

}

function ajax3 () {

return new Promise(function (resolve, reject){

console.log("执行:ajax3,执行3s")

setTimeout(()=>{resolve('ajax3');},3000);

});

}

function run (req) {

var it = generator(req); ;

function* generator(arr=[]) {

try {

for(let i of arr){

yield i();

}

} catch (e) {

console.log(e);

}

};

function go(result) {

if (result.done){

console.log('结束')

return result.value;

}

return result.value.then(function (value) {

return go(it.next());

}, function (error) {

return go(it.throw(error));

});

}

go(it.next());

}

run([ajax1,ajax2,ajax3]);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值