在下面的代码中,首先我调用一个服务来做一个http请求.
然后使用这个响应创建一个稍后使用的Map。
接下来,在数据表中调用一个新的http请求,并在显示数据之前使用上面的map做一些操作。
问题:我知道$http需要一些时间才能获得响应。我正在尝试使用promise,但失败了。请建议我如何使用promise,以便在第二个http调用之前解析第一个http并创建Map。
//Call to service to do a http call
MasterServices.getAllCustomers().then(function(result) {
$scope.resultdata= result.data;
$scope.resultdata.forEach(element => {
//creating map holding id, name
$scope.oumap.set(element.companyId,element.companyName)
});
});
//Setting Data-Table
vm.dtOptions = DTOptionsBuilder.fromFnPromise(function() {
var defer = $q.defer();
//Calling http call to get some configuration data
MasterServices.getCompConfig().then(function(result) {
angular.forEach(result.data,function(val){
if($scope.oumap.has(val.compId)){
val.companyName=$scope.oumap.get(val.compId);
}else{
val.companyName=" ";
}
});
defer.resolve(result.data);
});
return defer.promise;
}).withPaginationType('full_numbers').withOption('createdRow', createdRow);
1条答案
按热度按时间xxhby3vn1#
根据您的目标ecmascript版本,如果您以async-await的形式编写,这将简单得多。
如果由于某种原因无法使用上述方法,则需要将代码的“设置数据表”部分放在第一个承诺的成功回调中。