我有一个保存功能,我需要调用另一个函数来获取修订号。并且正在进行api通话。因为两者都是异步的。如何使一个函数等待其他执行
$scope.getRevision = function(callback){
Api.Product.querymyProdById({ prodId: $scope.editProdId }).$promise.then(function(result) {
if (result && result.length>=1 && result[0].effectiveDate != $scope.editProdmyDate) {
$scope.editProdRevision = result && result[0].revision +1;
callback();
} else {
$scope.editProdRevision = 100;
}
});
}
$scope.saveProd = function(){
$scope.getRevision(function(){});
Api.Product.save({
id: $scope.ProdId;
revision:$scope.editProdRevision
-some code
}
上面的代码我想确保在获得prodRevision之前不应该调用save api。
有什么建议吗?
答案 0 :(得分:5)
既然你有承诺就不要乱用回调。让你的函数实际返回一个promise并使用then
来链接调用。
$scope.getRevision = function(){
return Api.Product.querymyProdById(..).$promise...;
}
$scope.saveProd = function() {
return $scope.getRevision().then(function() {
return Api.Product.save(...);
})
}
答案 1 :(得分:1)
这正是javascript神为
发明了回调$scope.saveProd = function(){
$scope.getRevision(function(){
// this happens after getRevision finished
Api.Product.save({
id: $scope.ProdId;
revision:$scope.editProdRevision
-saome code
});
});
}
答案 2 :(得分:0)
你可以简单地在另一个之后做一个异步调用,比如这个 -
// First Simple GET request example:
$http({
method: 'GET',
url: '/someUrl'
})
.then(function successCallback(response) {
// this callback will be called asynchronously
// when the response is available
// Second Simple GET request example:
$http({
method: 'GET',
url: '/someUrl'
})
.then(function successCallback(response) {
}, function errorCallback(response) {
});
}, function errorCallback(response) {
// called asynchronously if an error occurs
// or server returns response with an error status.
});