0

promise を返す 2 つのメソッドがあります (非非同期解決で短縮)

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);
    });
}

そして、このチェイナーで .when を呼び出す別のメソッドがあります

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

コンソールに出力された答えは、私が予想していた「B」ではなく、「A」です! どうしてこれなの?また、このメソッドは methodA に依存しているため、methodB の結果を取得するにはどうすればよいですか。

ありがとうR

4

1 に答える 1

0

この問題は jQuery のバグによるものであることがわかりました。バージョン 1.7.2 を使用しており、.then の実装にバグがあります。非推奨の .pipe メソッドを引き続き使用する必要があります。それ以降のバージョンでは、両方とも期待どおりに機能します。

于 2014-12-10T03:26:14.963 に答える