promise情况下多个异步请求链式请求
场景
今天碰到文件上传,上传多张只会收到一张,由于调一次接口只能上传一张图片,原本我是用循环调接口,并行的请求,后来后端要求单个并且链式调用,等前一个接口返回了才调下一个
解决
由于不定个数肯定是只能通过数据遍历的形式去调用接口,
顺序+数组我就想到了reuduce
方法,虽然自己的想法没有成功,
试错过程发现:
-
js数组的高阶函数这些的函数体执行了异步代码时,即使使用
async await
,也是所有循环的同步代码执行完,采取执行异步代码(高阶函数就是类似map,reduce
) -
arr.reduce((cur,pre) => { // 同步代码 // 异步代码 request() })
要想不等同步代码执行完再执行异步代码就可以使用原生for
循环
for,for of
后来在其他博客看到大佬的写法
高阶函数版
async function add(...args) {
return args.reduce((promiseChain, item) => { return promiseChain.then(res => {
return addRemote(res, item); });
},Promise.resolve(0)); }