这是我的功能:
$scope.saveManualResendDraft = function(todo) {
if ($scope.editMode) {
updateStartJobManual();
byeSendManualInputDirectly();
} else {
console.log('bye');
}
};
我有两个函数 updateStartJobManual()和 byeSendManualInputDirectly()。
我想完全完成第一个功能然后我需要移动到第二个,怎么办?是否有可能使用承诺?我需要一些代码。
function byeSendManualInputDirectly() {
if ($window.confirm("Do you want to send this messages?"))
addProfSms();
else
console.log('no');
}
function addProfSms() {
$http.post('/api/sendprofsms', $scope.draft).then(function(response) {
swal("Good job!", "Message sended!", "success")
// $state.reload();
});
}
function updateStartJobManual() {
$http({
method: 'POST',
url: '/api/updatestartjobmanual',
data: $scope.draft
}).then(function(response) {
$scope.currentItem = response.data;
$scope.todos[$scope.currentItemIndex] = response.data;
$scope.editMode = false;
console.log('draft:', response.data);
$state.reload();
// toastr.success('Updated Successfully');
}, function(response) {
console.log('error');
});
}
答案 0 :(得分:1)
您的实际代码已同步执行updateStartJobManual
和byeSendManualInputDirectly
。
但是,如果您的功能正在处理承诺,则两个都将在后台作业运行时提前结束。所以,让我们将承诺链接起来,一个接一个地执行。
假设你的byeSendManualInputDirectly
(和byeSendManualInputDirectly)是这样的:
function byeSendManualInputDirectly(){
return $http.post('myApiAddress', {myParam: true});
}
这样,函数返回一个promise。
要连接updateStartJobManual
和byeSendManualInputDirectly
,您可以简单地:
updateStartJobManual().then(function(){
byeSendManualInputDirectly()
});
我建议你阅读一些关于promises的文章,并了解它们是如何工作的(参见this关于$ q使用的文档,promises angularjs使用的库)
根据OP的代码进行编辑:
只需在函数updateStartJobManual
中添加一个返回值,即:
function updateStartJobManual() {
return $http({
method: 'POST',
...
}
并在saveManualResendDraft
中添加一个then()来处理承诺:
$scope.saveManualResendDraft = function(todo) {
if ($scope.editMode)
updateStartJobManual().then(byeSendManualInputDirectly);
else
console.log('bye');
};