javascript - 循环调用Promise函数
业务场景:封装文件上传组件,有多个文件需要提交的时候,应当顺序提交,如果中间出现问题,需要终止文件提交。
基本方案:Promise 是 ES6 新增的语法,我们一般会用 Promise 来封装我们的提交函数。
顺序调用 n 次
封装
/**
* 链式递归调用 Promise 函数
*
* @param call 回调函数
* @param i 起始数值
* @param len 终止数值
* @returns {Promise<any>}
*/
static linkedPromise(call, i, len) {
return new Promise(resolve => {
call(resolve, i);
}).then(()=>{
i++;
if(i < len){
return this.linkedPromise(call, i, len);
} else {
return Promise.resolve();
}
})
}
使用方式:
Layers.linkedPromise((resolve, i) => {
setTimeout(()=>{
console.log(i);
if(i > 5){
throw '';
}
resolve();
}, 1000)
}, 0, 10);
级联调用
/**
* 比如你封装了这么个 Promise 行数
*/
static ajax(){
return Promise.resolve();
}
// 可以采用这种方式,要调用几次,就 then() 几次
Promise.resolve(ajax).then(action => {
return action('test1').then(str => {
console.log(str);
return action;
});
}).then(action => {
return action('test1').then(str => {
console.log(str);
return action;
});
}).catch(e=>{
console.err(e);
});
Promise.all
还可以使用 all 语法
let arr = [ajax(), ajax()];
Promise.all(arr).then(ret => {
// do sth.
}).catch(err => {
// do sth.
});
疯狂的妞妞 :每一天,做什么都好,不要什么都不做!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY