2014-12-10 2 views
0

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

А потом я имеют другой метод, который вызывает .когда на этом цепочке

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

Ответ напечатан на консоли i s 'A', а не 'B', как я и ожидал! Почему это? И как я могу получить результат методаB, так как этот метод зависит от метода А.

Благодаря R

+1

«Ответ напечатан на консоли« A », а не« B »- это« B », который напечатан. http://jsfiddle.net/hyjokegu/ Btw, реализация 'chainer' может выглядеть как' return methodA(). then (methodB); 'вместо этого. – zerkms

+0

Хм, так оно и есть ... должно быть что-то еще не так ... – raydenl

+0

Btw, вы должны упростить 'methodA(). Then (methodB)' и 'chainer(). Done (...)' – Bergi

ответ

0

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

Смежные вопросы