jQuery延迟链式保存,统一结果

时间:2012-08-06 15:53:38

标签: javascript jquery jquery-deferred

我有两个对象ObjectAObjectB。我想在ObjectB完成后才保存ObjectA,但我想返回一个包含两者结果的承诺。

这是我第一次用它来展示我想要的功能。这个功能很好,它只是丑陋而且肯定有更好的方法。

函数saveObjectAsaveObjectB都返回$.post()个承诺。

saveAAndBSequentially: function () {
    var dfd = $.Deferred();
    saveObjectA().done(function () {
        saveObjectB().done(function () {
            dfd.resolve();
        }).fail(function () {
            dfd.reject(); 
        });
    }).fail(function () {
        dfd.reject(); 
    });

    return dfd.promise();
}

我只是使用$.when并在done添加saveObjectA回调来触发saveObjectB,但saveObjectB的延迟还不存在所以我不相信我可以马上使用$.when

如何解决这个问题的想法是一种更优雅的方式,非常感谢!

1 个答案:

答案 0 :(得分:1)

.pipe()完成了您手动编码的任务:

var saveAAndBSequentially = function () {
    return saveObjectA().pipe(function () {
        return saveObjectB();
    });
};