在项目里做到了这么一个需求,同时发出多个请求,并在所有结果都接收到时跳转界面。
使用到了Promise.all方法来处理,直接看代码。
//存储promise对象的数组
let promiseArr = [];
//将图片地址的上传的promise对象加入到promiseArr
for (let i = 0; i < imageList.length; i++) {
let promise = new Promise((resolve, reject) => {
//这里可以写要发的请求,这里以上传为例
wx.uploadFile({
url: 'https://xxx.xxx.xxx/api/uploadImage',
filePath: imageList[i],
name: 'file',
success: function (res) {
//resolve必须要写,表示这个请求成功了
resolve(res);
},
fail: function (error) {
//reject必须要写,表示这个请求失败了
reject(error);
},
complete: function (res) {},
})
});
promiseArr.push(promise)
}
//Promise.all处理promiseArr数组中的每一个promise对象
Promise.all(promiseArr).then((result) => {
//在存储对象的数组里的所有请求都完成时,会执行这里
})
总的来说,就是把请求加到一个对象数组里,再抛给Promise.all方法,把这么一堆请求打包,再到后面.then一下,then里面的就是这一堆请求完成时的回调函数。
另外要注意,这些请求是并发的,完成是无序的,速度比有序要快。如想要有序执行,可以去看看promise的顺序执行。