javascript - 使用 jQuery 的动态 AJAX promise 链

标签 javascript jquery ajax promise chaining

我的 AJAX 调用是在 for 循环内构建的。它们需要有序(同步)。我如何使用 jQuery 链接它们?

var array = ['One', 'Two', 'Three'];
var arrayLength = array.length;
for (var arrayCounter = 0; arrayCounter < arrayLength; arrayCounter++) {
    var id = array[arrayCounter];
    getData(id);

    function getData(id) {
        $.ajax({
            url: 'http://example.com/' + id,
            dataType: 'jsonp',
            success: function(d) {
                var response = d;
                console.log(d);
            },
            error: function() {
                alert("ERROR");
            }
        });
    }
}   

最佳答案

使用for的解决方案:

var array = ['One', 'Two', 'Three'];
var id = array[0];
var data = getData(id);
for (var i = 1; i < array.length; i++) {
    // Or only the last "i" will be used
    (function (i) {
        data = data.then(function() {
            return getData(array[i]);
        });
    }(i));
}

// Also, see how better the getData can be.
function getData(id) {
    return $.ajax({
        url: 'http://example.com/' + id,
        dataType: 'jsonp',
    }).done(function(d) {
        var response = d;
        console.log(d);
    }).fail(function() {
        alert('ERROR');
    });
}

顺便说一下,如果你使用了合适的 promises 库,比如 bluebird ,您将使用以下代码:

var array = ['One', 'Two', 'Three'];
Promise.reduce(array, function(data, id) {
    return data.promise.then(function(result) {
        return { promise: getData(id), results: data.results.push(result) };
    });
}, []).then(function(data) {
    console.log(data.results); // yay!
});

function getData(id) {
    return Promise.cast($.ajax({
        url: 'http://example.com/' + id,
        dataType: 'jsonp',
    }).done(function(d) {
        var response = d;
        console.log(d);
    }).fail(function() {
        alert('ERROR');
    }));
}

如您所见,读/写更容易。

关于javascript - 使用 jQuery 的动态 AJAX promise 链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22736281/

相关文章:

javascript - 如果 IE 条件不起作用

Javascript 扩展变量中的对象

javascript - 发送相同的数据以在 Node.js/Express.js 中的 POST 和 GET 中查看

javascript - 如何在javascript中检查null?

javascript - 在 onsubmit 事件上获取表单的 id

javascript - 刷新时更改配色方案

javascript - 如何使用 Jquery 格式化 $.now()

javascript - 淡出功能以及 slidetoggle 功能

jquery - Tomcat UTF-8 编码故障

java - 我可以使用什么来为在 tomcat 上运行的 java servlet 中的每个 session 实现后台进程?