以下是代码:
vm.saveData = function(data) {
demoService.saveData(data, function(response) {
if (response.status === 200) {
principal.identity(true).then(function() {
$state.reload();
return toastr.success('Success');
});
}
return toastr.error('Failure');
});
}
从api获得成功响应后,它应该只显示“成功”消息。但是,它首先显示“失败”消息,然后显示“成功”消息。我究竟做错了什么?我是否必须暂停或是否有我在这里缺少的东西?
答案 0 :(得分:1)
如果状态为200,那么您设置了稍后致电success
的承诺。
无论状态如何(因为它位于if
之外且您没有使用else
),您始终致电error
。
据推测,您只想将return toastr.error('Failure');
移至else
答案 1 :(得分:1)
这不是你设定承诺的方式。承诺使用.then()
。您只是将函数作为回调传递。
vm.saveData = function(data) {
demoService
.saveData(data)
.then(success, error);
function success(response) {
principal.identity(true).then(function() {
$state.reload();
return toastr.success('Success');
});
}
function error(response) {
return toastr.error('Failure');
}
};
答案 2 :(得分:0)
许多系统(如AJAX)会发送多条消息来指示任务进度。您想忽略之前的消息。失败消息来自早期事件,而操作不完整。
答案 3 :(得分:0)
我发现了我的错误。添加'return'解决了这个问题。
'return principal.identity(true).then(function(){
//在这里做点什么
});'
vm.saveData = function(data) {
demoService.saveData(data, function(response) {
if (response.status === 200) {
return principal.identity(true).then(function() {
$state.reload();
return toastr.success('Success');
});
}
return toastr.error('Failure');
});
}