проблема получения надлежащего обещания сбой функции для запуска после нарушенного обещания
Я пытаюсь отвергнуть обещание, и оно, кажется, работает, но не совсем так, как ожидалось.
Parse.Promise.as(1).then(function() {
var vendor = user.get('vendor');
if (vendor)
return vendor.fetch();
else
return Parse.Promise.error("No vendor found");
}, function() {
//specific promise error for this particular promise
res.redirect('/vendor/signup');
}).then(function(result) {
var vendor = result;
res.render('vendor/dashboard.ejs', {
'user': user,
'vendor': vendor
});
}).fail(function(error) {
//general catch all error controller
res.render('error.ejs', {
'error': error
});
});
Если обещание не удается в первом разделе, где он пытается загрузить поставщика, я хочу, чтобы ошибка для перенаправления. Вместо этого он проваливается в конечный провал. Как правильно это сделать? Разве вторая функция, передаваемая затем, не должна быть той, через которую она проходит, если она существует?
1 ответ:
Основной сигнатурой
.then
является.then(onFulfilled,onRejected)
- это означает, что он принимает обещание, на которое он вызван, и вызывает обработчики, основанные на разрешении этого обещания :p.then(function onFulfilled(){ // this gets called only when p fulfills. },function(){ // this gets called only when p is rejected, if the above onFulfilled // rejects, this doesn't get called, instead it'll propagate });
Как правило, прикрепите обработчик
.then(null,function(){
к руке; e исключения в сегменте кода:p.then(function onFulfilled(){ // this gets called only when p fulfills. }).then(null,function(){ // <- note the .then // this gets called only when the above promise _including_ the onFulfilled // handler rejects. Since now the code is `.then`ing the result of the promise // created by the first .then handler. });
Также-используйте
.catch
в библиотеках, которые поддерживают его для ясности, к сожалению, это не так parse.com обещания.