проблема получения надлежащего обещания сбой функции для запуска после нарушенного обещания


Я пытаюсь отвергнуть обещание, и оно, кажется, работает, но не совсем так, как ожидалось.

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 2

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 обещания.