为所有被拒绝的承诺调用相同的函数

时间:2015-11-22 05:12:44

标签: javascript angularjs request

我想在发生错误的情况下为所有的承诺做同样的事情。如何重构我的代码以获得相同的结果,但没有重复的代码?

$rootScope.syncing = false;
$scope.syncError = true;

我的承诺:

Users.updateAuth().then(function(auth) {
    Interests.syncAll().then(function(interests) {
        Events.syncAll().then(function(events) {
            $rootScope.syncing = false;
        }, function(error) {
            $rootScope.syncing = false;
            $scope.syncError = true;
        });
    }, function(error) {
        $rootScope.syncing = false;
        $scope.syncError = true;
    });
}, function(error) {
    $rootScope.syncing = false;
    $scope.syncError = true;
});

3 个答案:

答案 0 :(得分:0)

如果你真的想要,你可以:

function error() {
    $rootScope.syncing = false;
    $scope.syncError = true;
}

然后在3个地方的每个地方打电话。

如果这非常明显而不是你正在寻找的东西,我表示道歉。

我不知道更好的方法。

承诺通常有一个"始终"你可以在任何事情发生时使用,无论成功或失败,但我认为这不适用于你。

答案 1 :(得分:0)

你可以这样做。承诺是可以链接的。你可以在链中的最后一个承诺上使用catch。

$autoload['libraries'] = array('database','../core/input');

注意:

我在此代码段中使用了箭头功能。如果您知道,它只是绑定匿名函数的简短形式。 Users.updateAuth().then((auth)=>{ //do something with auth here return Interests.syncAll() }).then((interests)=>{ //do something with interests return Users.updateAuth(); }).then((events)=>{ //do something with events $rootScope.syncing = false; }).catch((err)=>{ //catch any error here $rootScope.syncing = false; $scope.syncError = true; console.log(err); }); 实际上是()=>{}只是一个简短形式。没有绑定的function(){}在这里工作得很好,因为我们没有使用这个引用。

答案 2 :(得分:0)

如果您在Promise的20.2.2.24 Math.max ( value1, value2 , …values ) Given zero or more arguments, calls ToNumber on each of the arguments and returns the largest of the resulting values. • If no arguments are given, the result is −∞. • If any value is NaN, the result is NaN. • The comparison of values to determine the largest value is done using the Abstract Relational Comparison algorithm (7.2.11) except that +0 is considered to be larger than −0. The length property of the max method is 2. 20.2.2.25 Math.min ( value1, value2 , …values ) Given zero or more arguments, calls ToNumber on each of the arguments and returns the smallest of the resulting values. • If no arguments are given, the result is +∞. • If any value is NaN, the result is NaN. • The comparison of values to determine the smallest value is done using the Abstract Relational Comparison algorithm (7.2.11) except that +0 is considered to be larger than −0. The length property of the min method is 2. 回调中返回Promise,则该承诺将用于then链:

then