2015-03-03 2 views
1

Как функция, возвращающая обещание, запускаться после возврата функций Deferred.promise()?Выполнять последующие функции после разрешения отложенного объекта

У меня есть пример проблемы на JSFiddle. Предупреждающие сообщения предназначены для завершения с «выполненным третьим?». в отличие от этого предупреждения, отображаемого в середине «выполненного первым»? и "исполнено второе?" предупреждающие сообщения.

Кроме того, почему код примера из JSFiddle не выполняется в ожидаемом порядке?

+0

У меня есть решение: [link] (http://jsfiddle.net/jinhale/toqt66sq/4/), но я до сих пор не знаю, почему решение работает в отличие от кода в OP. – haleonj

ответ

2

Обещает работу значение возвращается. Если вы не вернетесь с then, нет никакого способа обещать, что он должен дождаться этого значения в последующих then s.

Когда вы делаете:

login() 
.then(function() { 
    getGuIdFromUser(); // return undefined implicit 
}) 
.then(function() { 
    getUserData('val'); // return undefined implicit 
}); 

Там нет никакого способа для библиотеки ждать значение, так как undefined неявно возвращается. Если вы добавите возвращает это работает:

login() 
.then(function() { 
    return getGuIdFromUser(); 
}) 
.then(function() { 
    return getUserData('val'); 
}); 

Обратите внимание, что $.getJSON уже возвращает обещание, поэтому нет никакой необходимости, чтобы обернуть его в $.Deferred.

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