Изменить accountDataUpdate
, чтобы вернуть обещание:
call.accountDataUpdate = function(accounts) {
call.accounts = accounts;
var promise = getCallDetails(getCallIdsFromCallsForFilteredAccount())
.then(function() {
updateProductFrequencyTableData();
updateAccountDetailData(true);
updateDailyFrequencyChartData();
updateWeeklyFrequencyChartData();
updateCallFrequencyTableData();
updateAccountFrequencyData();
return $timeout(function() {
$scope.$broadcast('updateDoughnutChart');
$scope.$broadcast('updateBarChart');
});
});
return promise;
};
Затем используйте это обещание для цепочки:
filter.filterAccountsByProductMetrics1 = function(productWithSegmentations12) {
return accountService.fetchAccountForRecordType([filter.selectedHcpHco.Name.display])
.then(function(resp) {
return $scope.accountDataUpdate({
accounts: resp.data
});
}).then(function() {
var productId = null;
if(filter.selectedMySetupProduct.Product_vod__c) {
productId = filter.selectedMySetupProduct.Product_vod__c.value;
}
return callService.getCallsForProductId(productId)
}).then(function(calls) {
filter.filterRecords[filterType.product.value] = calls;
return $scope.callDataUpdate({
calls: applyAllFilterOnCalls()
});
});
};
Поскольку вызов метода обещания .then
возвращает новое производное обещание, можно легко создать цепочку обещаний.
Можно создавать цепочки любой длины, и поскольку обещание может быть разрешено с помощью другого обещания (что приведет к дальнейшему отложению его разрешения), возможно приостановить / отложить разрешение обещаний в любой точке цепочки. Это позволяет реализовать мощные API.
Для получения дополнительной информации см. Справочник по API AngularJS $ q - Обещания цепочки .