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.
});

posted on   疯狂的妞妞  阅读(874)  评论(0编辑  收藏  举报

(评论功能已被禁用)
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示