处理链中的承诺错误,我是否太渴望了?

时间:2015-06-18 14:30:31

标签: javascript promise

一般来说,角色和承诺相当新,我觉得我做的一切都是正确的,直到我读到了关于共同承诺的反模式。我也注意到我的代码变得非常难以理解和阅读。

BTW,使用Angular的Q实现。

在这个链中,我是否正确处理错误?我应该使用捕获吗?我该怎么办?我可以让我的代码更简洁吗?

编辑: 找不到谈论如何处理条件承诺的问题。所有其他stackoverflow问题都非常简单,没有像我的例子那样复杂的链接。希望这个问题可以帮助某人

function importantPromise(){
    var deferred = $q.defer();
    var importantVariable;

    topLevelPromise().then(function(result) {
        var secondResult = doSomeWork(result, importantVariable);
        secondPromise(secondResult)
            .then(function(result) {
                deferred.resolve(result);
            }, function(error) {
                deferred.reject(error);
            });
    }, function(error) {
        conditionalPromise(importantVariable)
            .then(function(result) {
                deferred.resolve(result);
            }, function(error) {
                deferred.reject(error);
            });
    });
    return deferred.promise;
}

//Actually using the promise
importantPromise().then(function(result){
    handleResult(result);
}, function(error){
    handleError(error);
});

1 个答案:

答案 0 :(得分:1)

好笑,我刚给我的团队发了一封电子邮件,说明这个错误。你为自己制造的东西太难了。就这样做:

function importantPromise(){
    var importantVariable;

    return topLevelPromise().then(function(result) {
      var secondResult = doSomeWork(result, importantVariable);
      return secondPromise(secondResult);
    }).catch(function(error) {
      return conditionalPromise(importantVariable);
    });
}

这是承诺链的本质。

你可能在想,"不,如果我这样做,我的handleResult和handleError函数将被提前调用,使用promises而不是final值!"

不,不,不,porpoise-puss。 Promise-chaining意味着如果一个解析函数返回一个promise,那个promise将自行解析,并将其值传递给链中的下一个resolution-function。试试吧。