Promise.all()
当多个请求同时上传时,全部成功获取到数据才能执行下一步
var allurl = ['http://10.16.xxx.211:8082/api/uploadFont',"http://10.18.xxx.73:8082/api/uploadFont"]
//allpost()封装的 $.ajax请求
Promise.all(allurl.map(async (item) => {
return await allpost(item)
}))
.then((values) => {
//执行下一步(发送请求)
})
.catch(req => {
console.log("上传失败了");
})
//封装的 $.ajax请求
function allpost(url) {
let p = new Promise(function (resolve, reject) {
$.ajax({
type: "POST",
url: url,
data: data,
async: true,
contentType: false, //多出的参数配置
processData: false, //多出的参数配置
success: function (res) {
console.log(res);
res = JSON.parse(res)
if (res.success) {
//返回成功数据
resolve(res);
} else {
//返回成功数据
reject(res)
}
}, error: function (json) {
console.log("请求失败");
}
})
}
)
return p
}
注Promise.all()是只能获取到第一个失败回调的
Promise.allSettled()
想知道每个promise的结果时,通常使用它。
Promise.allSettled(promise数组).then(statuses => {
statuses; // [{ status: '...', value: '...' }, ...]
});
返回的数组statusesPromise中每一项的的格式如下:
{ status: 'fulfilled', value: value } — 如果对应的 promise 已完成
或者
{ status: 'rejected', reason: reason } — 如果相应的 promise 已拒绝