jQuery $ .then带有前面函数的参数

时间:2013-11-27 15:41:30

标签: jquery

我有三个ajax调用。第二个应该从第一个的结果接收参数,第三个应该从第二个接收参数。如:

var getYears = function getYears() {return $.ajax({....});};
var getMonths = function(year)  {return $.ajax({...});};
var getDays = function(month, year) {return $.ajax({...})};

我很遗憾如何将这些链接成$.when()

到目前为止,我所做的工作正常,但我更喜欢$.when()方式,因为我将在稍后的代码中引用结果。

    function init() {
        var y, m, d;
        getYears().then(function (years) {
            var year = years.d[0];
            y = years.d;
            getMonths(year).then(function (months) {
                var month = months.d[0].MonthNo;
                m = months.d;
                getDays(month, year).then(function (days) {
                    d = days.d;
                }).done(function () {
                    return initialize = { years: y, months: m, days: d };
                });
            });
        });
    }; 

当我使用时:

$.when(
    getYears(),
    getMonths(//here i need to refer the result of getYears),
    getDays(//here needs the result of getMonths).done(function()
    {// do something else})
);

2 个答案:

答案 0 :(得分:0)

$.when()接受以逗号分隔的promises(数组不起作用)然后,一旦所有这些promise都已解决,它将按照then指定的顺序将它们传递给$.when()函数。你不必担心哪个回叫会先完成。

例如:

$.when(getyears,getmoths,getdays).then(function(year,month, day){
    console.log("today is: " + year + month + day);
});

当你需要在你的ajax调用上使用$.deferred()时,为了获得那些承诺,所以他们会返回一个承诺。

答案 1 :(得分:0)

你想做这样的事吗? http://jsfiddle.net/Chubyone/NtQKs/

init().done(function(day, month, year){ /*stuff */ });特别是?