Если у меня естьЧто такое различию между этими двумя синтаксисом
promise = userService.updateUser($stateParams.userId, req);
promise.then(
function(user) {
logger.logSuccess('Updated user');
$scope.resetForm();
WizardHandler.wizard().goTo(0);
return user;
},
function(error) {
logger.logError('Ups an error has occurred');
console.error('error updating user: ' + error);
}
);
promise.then(function(user) {
_.each(uploader.getNotUploadedItems(), function(item) {
return item.formData.push({
id: user.id
});
});
});
Тогда, если updateUser терпит неудачу журнал будет показан, а затем второй then
не будет выполняться, однако, если у меня есть
promise = userService.updateUser($stateParams.userId, req).then(
function(user) {
logger.logSuccess('Updated user');
$scope.resetForm();
WizardHandler.wizard().goTo(0);
return user;
},
function(error) {
logger.logError('Ups an error has occurred');
console.error('error updating user: ' + error);
}
);
promise.then(function(user) {
_.each(uploader.getNotUploadedItems(), function(item) {
return item.formData.push({
id: user.id
});
});
});
Второй будет выполнен
Я не могу понять, почему, я имею в виду, разве это не обычная цепочка?
Сноска для тех, кто пытается следовать этому: что говорит Берги, верно для местных обещаний js и большинства основных обещаний libs. Но ** будьте внимательны к обещаниям jQuery **, которые ведут себя по-разному. В jQuery обработчик ошибок. Then отмечает обещание ниже по потоку как «обработанное» *, только если * он явно возвращает отклоненное обещание. Естественное поведение заключается в распространении состояния ошибки. Таким образом, ни одна из версий кода в вопросе не срабатывает у второго обработчика успеха. Обратите также внимание на то, что люди в jQuery, скорее всего, нормализуют это поведение в какой-то момент в будущем. –
@ Roamer-1888: [Это не единственная проблема] (http://stackoverflow.com/a/23744774/1048572), но на самом деле я не хочу связывать это сообщение с каждым вопросом, обозначенным обещанием. jQuery отложенные не являются надлежащими обещаниями, point :-) – Bergi
Берги, я согласен, вы не можете предлагать «jQuery proviso» каждый раз. Но ваши диаграммы делают этот ответ очень ясным и убедительным - его, вероятно, прочитают многие люди. –