javascript - 在解决服务方法上的 promise 之前,它会转到主方法的 promise

标签 javascript angularjs

我编写了 Angular Service,如下所示。

getPropertyDetailsByUsingApiService.js

(function () {
    appModule.service('getPropertyDetailsByUsingApiService', ['$http', function ($http) {
        this.propertyDetails = function (token, number, street, county, zip) {
            var endpointUrl = 'http://my.com/api/Matcher?Token=';
            var url = endpointUrl + token + '&Number=' + number + '&Street=' + street + '&County=' + county + '&Zip=' + zip;

            return $http.get(url).then(function (data) {
                var result = data;
                if (result.data[0].Status == 'OK') {
                    $http.get(endpointUrl + token + '&Krp=' + result.data[0].Result[0].KRP + '&County=' + county)
                        .then(function (finalData) {
                            return finalData;
                        });
                }
            });
        };
    }
    ]);
})();

这是消费方法:

propertyForm.js

    //to call Api
    vm.callApi = function () {
         var county = _.find(vm.counties, function (c) { return c.id == vm.property.countyId; });
         var city = _.find(vm.cities, function (c) { return c.id == vm.property.address.cityId; });

getPropertyDetailsByUsingApiService.propertyDetails(vm.getMd5Hashbytes(), vm.property.address.streetNumber, vm.property.address.streetName,
      county.name, city.zipCode).then(function (result) {
                   vm.propertyDetails = result;
                });
        };

问:这里的问题是在解决服务方法上的 promise 之前,它转到主方法的 promise 。换句话说,在解决服务方法上的第二个 promise 之前,它转到调用方法的 promise .你能告诉我问题出在哪里吗?

最佳答案

您可以重写:

return $http.get('url').then(function(r) => { return r;})

如:

var defer = $q.defer();

$http.get('url').then(function(r) => { defer.resolve(r);})

return defer.promise;

这在通常情况下没有意义,但在特殊情况下,你可以用这种结构做任何事情:

var defer = $q.defer();
if (smth) {
    defer.resolve('test1');
} else {
    $http.get('url').then(function(r) => {
        if (smth2) { 
            defer.resolve(r);
        } else {
            $http.get(..., function(r) => {
                defer.resolve(r);
            })
        }
    })
|

return defer.promise;

关于javascript - 在解决服务方法上的 promise 之前,它会转到主方法的 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39034515/

相关文章:

javascript - 使用 DateAdd() 在 Javascript/Classic ASP 中设置日期格式

javascript - 图片上传前预览时通过id获取图片

php - 防止表单刷新页面Javascript

javascript - 我如何获得 Angularjs 模块并在其上调用 .value?

jquery - jquery GET 调用比 Angular $http.get 更快吗

javascript - 如何将 CSS 属性设置为 if 语句中的条件?

javascript - 如何在 $scope.$on 中停止方法执行直到上传结束

javascript - AngularJS:自定义字符串序列化的2路绑定(bind)

jquery - bxslider 指令抛出错误 `Uncaught TypeError: Cannot read property ' indexOf' of undefined`

javascript - VueJS : what does an html attribute prefixed with a colon signify?