【发布时间】:2017-03-11 02:21:41
【问题描述】:
我想在调用第二个服务之前返回一个邮政编码,这样——据我所知——我可以封装一个promise,然后稍后再请求promise。所以我想我会把我的第二个服务放在第一个服务的承诺中。但是以这种方式链接承诺并不友好。
Angular 工厂在工厂方法内部被调用:
var userGeoPromise = userService.getGeoposition().then(function (geoposition) {
vm.geoposition = geoposition;
return addressService.reverseGeocode(geoposition.coords);
}).then(function (data) {
vm.currentLocation = googleService.googleAddressComponentsToAddress(data.results[0]);
zipCodeCurrent = vm.currentLocation.zip;
});
注意以上两点:
- 我将承诺分配给
var userGeoPromise -
zipCodeCurrent设置为包含邮政编码
Promise 测试工作正常:
userGeoPromise.then( function() {
console.log('should always show', zipCodeCurrent);
});
第二次服务电话:
userGeoPromise.then( function() {
var serviceBase = "http://localhost:2295/api/getservicezip/"+ zipCodeCurrent;
var serviceZipPromise = $http.get(serviceBase);
return serviceZipPromise.then(function (results) {
console.log('serviceZipPromise', results);
return results.data;
});
});
但是当我把serviceZipPromise.then... 放在另一个承诺中时,网站模式只是旋转。
【问题讨论】:
-
我认为
googleService.googleAddressComponentsToAddress是不是异步的 -
控制台消息中有什么要说的吗?可能是
$http.get(serviceBase)正在拒绝(您绝对没有拒绝处理程序,因此有理由认为最后一段代码中有某些内容正在拒绝) -
好吧,我不确定这个 googleservice 的事情......但似乎只要我在调用其他服务之前等待这件事,就没有关系了。早些时候我什至尝试调用一个函数并将第二个服务包装在一个函数中,认为它会很好,因为它最终会被调用,但这也不起作用。
-
我可以将第二个服务调用从 promise 调用中提取出来,并且它可以工作,除了我必须硬编码邮政编码
return serviceZipPromise.then(... -
我在互联网上找不到任何关于
googleAddressComponentsToAddress的信息 - 这是你自己的功能吗?
标签: javascript angularjs asynchronous promise angular-promise