如何在 Angular JS 中从不同服务调用的结果调用第二个服务?



我有以下内容

$scope.submitData = function () 
{
myService.getdatabaseObjects({
Field1: $scope.field1,                
}).then(function (result) {
if (result.data !== null && result.data !== '') 
{                                   
if (result.data.hasobjects.length === 0)
$scope.msg = 'There are No Objects,Are you sure you want to submit ?';
else
$scope.msg = 'Are you sure you want to submit ?';
}
// should the call to mydialogModal go in here ?
});
// I want to set the $scope.msg depending on the result from above ?
mydialogModal($scope.msg, 'Yes', 'No')
.result.then(function (result) {                   
$scope.gridLinkedMapsData.sync();
myService.submitrego({
Field1: $scope.field1,
}).then(function (result) {                        
if (!result.data.success) 
{
mydialogModal(result.data.error, 'Submit error', 'OK',    false);                        
}                        
});
});
};

我想根据$scope.mappingdata.hasobjects.length的结果设置对话框的$scope.msg。如果长度> 0,则为"没有对象,您确定要提交吗?"否则为另一个。但似乎发生的事情是,第二个服务在没有等待第一个服务完成的情况下被调用 我应该将第二个服务呼叫放在第一个的 .then 中吗?

谢谢

是的,你的猜测是正确的,由于Javascript的异步性质,第二个调用不会等待第一个调用返回。将模态代码放入函数中并将其调用到then

$scope.submitData = function () 
{
myService.getdatabaseObjects({
Field1: $scope.field1,                
}).then(function (result) {
if (result.data !== null && result.data !== '') 
{                                   
if (result.data.hasobjects.length === 0)
$scope.msg = 'There are No Objects,Are you sure you want to submit ?';
else
$scope.msg = 'Are you sure you want to submit ?';
$scope.openModal();
}
});
};
$scope.openModal = function() {
mydialogModal($scope.msg, 'Yes', 'No')
.result.then(function (result) {                   
$scope.gridLinkedMapsData.sync();
myService.submitrego({
Field1: $scope.field1,
}).then(function (result) {                        
if (!result.data.success) 
{
mydialogModal(result.data.error, 'Submit error', 'OK',    false);                        
}                        
});
});
}

最新更新