使用链式承诺与.when

时间:2014-12-10 00:50:50

标签: javascript jquery asynchronous jquery-chaining

我有2个返回promises的方法(用非异步解析缩短)

function methodA () {
    var d = $.Deferred();
    d.resolve('A');
    return d.promise();
}

function methodB (dependency) {
    var d = $.Deferred();
    // dependency would be used here
    d.resolve('B');
    return d.promise();
}

然后我有另一种链接这些

的方法
function chainer () {
    return methodA().then(function(result) {
        return methodB(result);
    });
}

然后我有另一个方法在这个chainer上调用.when

function main () {
    $.when(chainer()).done(function (answer) {
        console.log(answer);
    });
}

打印到控制台的答案是'A',而不是'B',正如我所料!为什么是这样?我怎样才能得到methodB的结果,因为这个方法依赖于methodA。

由于 [R

1 个答案:

答案 0 :(得分:0)

发现问题是由于jQuery中的一个错误。我们使用1.7.2版,而.then实现有一个bug。您仍然需要使用已弃用的.pipe方法。在以后的版本中,两者都按预期工作。