我想在发生错误的情况下为所有的承诺做同样的事情。如何重构我的代码以获得相同的结果,但没有重复的代码?
$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;
});
答案 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