这是我的代码:
function ajaxRequest(value, path, website){
var status = false;
return new Promise(function (resolve, reject) {
window[website] = $.ajax({
url : path,
type : 'GET',
data: { "name": value,
"_token": $('meta[name="_token"]').attr('content')
},
beforeSend: function(){
if(window[website] != null) {
window[website].abort();
}
},
success: function (people) {
status = true;
resolve([status, people]);
},
error: function (jqXHR, textStatus, errorThrown) {
reject([status, textStatus]);
},
timeout: 20000
});
});
}
我将这个函数称为:
ajaxRequest('Jack', 'search/twitter', 'twitter').then(function(res) { console.log(res)}, function(err){console.log(err)});
ajaxRequest('Jack', 'search/instagram', 'instagram').then(function(res) { console.log(res)}, function(err){console.log(err)});
现在我需要知道这两个ajax请求已经完成。我怎么能这样做?
注意我认为我必须使用promise.all()
,但不确定如何在我的情况下使用它。
答案 0 :(得分:2)
你是对的,promise.all()
是为了解决这个问题而发明的。
它所做的就是返回一个新承诺,当所有给定的Promise得到解决时,它将得到解决。
在您的情况下,您可以使用Promise.all
这样的内容包装2个ajax调用:
promise.all([
ajaxRequest('Jack', 'search/twitter', 'twitter').then(function(res) { console.log(res)}, function(err){console.log(err)}),
ajaxRequest('Jack', 'search/instagram', 'instagram').then(function(res) { console.log(res)}, function(err){console.log(err)})
]).then(([response1, response2]) => {
// Here you execute your logic when both of the promises are resolved.
})
答案 1 :(得分:1)
您可以将函数调用传递给$.when()
。注意,jQuery.ajax()
返回一个jQuery promise对象,没有必要使用Promise
构造函数
$.when(ajaxRequest(), ajaxRequest())
.then(function(...results) {
// do stuff with `results` array
})
.fail(function(jqxhr, textStatus, errorThrown) {
console.error(errorThrown)
})