javascript - 通过 promise 从多个来源获取数据

标签 javascript jquery promise

我试图从一个或多个来源获取数据,因此我传入了一组 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/

相关文章:

javascript - classList.add 不起作用

Javascript: promise 等待条件或在尝试次数后中止

Javascript,promise.then()函数首先执行

javascript - jqGrid - 如何从本地数据中删除行?

javascript - 我有四个菜单按钮,但通过 jQuery 只有一个弹出窗口,我可以概括还是需要四个不同的窗口?

javascript - @RequestParam 不接受请求发送的字符串中的 '&',存储 & 之前的所有字符并 chop 其余字符

javascript - 为什么浏览器在执行许多 ajax 请求时会死机?

javascript - 滑动时防止触摸启动

javascript - 剪刀石头布游戏的循环计数(潜在的 jquery 问题)

javascript - react promise : TypeError: Cannot read property 'then' of undefined