Javascript 对所有被拒绝的本票调用相同的函数
我想对所有的期票做同样的事情,以防出错。如何重构代码以获得相同的结果,但不需要重复代码Javascript 对所有被拒绝的本票调用相同的函数,javascript,angularjs,request,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;
$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;
});
如果你真的想要,你可以:
function error() {
$rootScope.syncing = false;
$scope.syncError = true;
}
然后在这三个地方分别称之为
我很抱歉,如果这是非常明显的,不是你要找的
我不知道还有什么更好的办法
承诺通常有一个“永远”的词,你可以用它来表示你想让事情发生,不管成功或失败,但我认为这不适用于你。你可以这样做。承诺是可以链接的。你可以在最后一个承诺上使用catch
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);
});
注意:
我在这段代码中使用了arrow函数。在这种情况下,您可能不知道,它只是绑定匿名函数的一个简短形式。
()=>{}
实际上是函数(){}.bind(this)代码>只是一个简短的表单。没有绑定的函数(){}在这里可以正常工作,因为我们不使用this引用。如果在承诺的然后回调中返回承诺,则该承诺将用于然后链:
Users.updateAuth().then(function(auth) {
// do something with auth
return Interests.syncAll();
}).then(function(interests) {
// do something with interests
return Events.syncAll();
}).then(
function success(events) {
// do something with events
$rootScope.syncing = false;
},
function failure(error) {
$rootScope.syncing = false;
$scope.syncError = true;
}
);
成功了!现在,我试图为每个步骤获取通知消息,但什么也没有发生。看看我是怎么做的,按照你的逻辑:Users.updateAuth().then(函数(auth){return Interests.syncAll();})。然后(函数(Interests){return Events.syncAll();})。然后(函数(Events){$rootScope.syncing=false;},函数(error){$rootScope.syncing=false;$scope.alerts.push({type:'danger',msg:error});},函数(消息){$rootScope.syncing=message;})
我还添加了deferred.notify,在每次请求之前都会发送一条消息。我收到了,只需使用一个超时函数,notify就会工作;谢谢!