我试图从一个或多个来源获取数据,因此我传入了一组 url 以从中获取数据并做出 promise 。
然后我尝试使用 Promise.all
来获取所有数据,但我什么也没得到。
我该如何解决这个问题?
var getData = function (urls) {
var promises = [];
$.each(urls, function (index, url) {
var promise = new Promise(function (resolve, reject) {
$.ajax({
type: 'get',
url: url,
dataType: 'json',
success: function (data) {
console.log(data);
}
});
});
promises.push(promise);
});
console.log(promises);
Promise.all(promises).then(function () {
console.log('Complete');
});
};
最佳答案
您可以通过在数组下使用推送响应并在 done()
上使用它来完成
var xhr_request=[];
var responses=[];
$.each(urls, function (index, url) {
// you can push any aysnc method handler
xhr_request.push($.ajax({
url: url,
type:'get',
dataType:'json',
data:{user_name: users[i]},
success: function(data){
console.log('success of ajax response')
responses.push(data);
}
}));
});
$.when.apply(null, xhr_request).done( function(){
// all done
console.log('all request completed')
console.log(responses);
});
这里 $.when 提供了一种基于零个或多个对象执行回调函数的方法,通常是表示异步事件的 Deferred 对象。
$.apply 将数组元素转换为函数中的不同参数
$.done 是所有异步之后的调用函数。请求完成。
关于javascript - 通过 promise 从多个来源获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39570011/