Использование цепных обещаний с.when

У меня есть 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);
    });
}

Ответ, напечатанный на консоли: "А", а не "В", как я ожидал! Почему это? И как я могу получить результат methodB, так как этот метод зависит от methodA.

Спасибо R

1 ответ

Нашел проблему из-за ошибки в jQuery. Мы используем версию 1.7.2, и в реализации.then есть ошибка. Вам все еще нужно использовать устаревший метод.pipe. В более поздних версиях оба работают как положено.

Другие вопросы по тегам