Javascript 在解决服务承诺方法之前,先转到主方法&x27;承诺

Javascript 在解决服务承诺方法之前,先转到主方法&x27;承诺,javascript,angularjs,Javascript,Angularjs,我已经写了如下所示的角度服务 getPropertyDetailsBySingapiService.js 这就是消费方法: propertyForm.js Q:这里的问题是在解决服务方法的承诺之前,它转到主方法的承诺。换句话说,在解决服务方法的第二个承诺之前,它转到调用方法的承诺。你能告诉我问题在哪里吗 您可以重写: return $http.get('url').then(function(r) => { return r;}) 作为: 这在通常情况下没有意义,但在特殊情况下,您可以使

我已经写了如下所示的角度服务

getPropertyDetailsBySingapiService.js

这就是消费方法:

propertyForm.js

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

您可以重写:

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

这在通常情况下没有意义,但在特殊情况下,您可以使用此构造执行任何操作:

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;
您可以重写:

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

这在通常情况下没有意义,但在特殊情况下,您可以使用此构造执行任何操作:

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;

因此,在服务的第一个承诺中,您没有返回第二个承诺,因此第一个承诺只是在方法完成时完成并解析,而不是等待第二个承诺

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

因此,在服务的第一个承诺中,您没有返回第二个承诺,因此第一个承诺只是在方法完成时完成并解析,而不是等待第二个承诺

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

我会尝试你的解决方案,并让你知道。但是你能告诉我为什么我的实现不起作用吗?谢谢。干杯……我的朋友,这很有效。非常感谢。希望你回来后能对上述问题给出反馈。祝你愉快:)我会尝试你的解决方案,并让你知道。但你能告诉我为什么我的实现不起作用吗?谢谢。干杯……这很有效,我的朋友。非常感谢。希望你回来后能对上述问题给出反馈。祝你度过愉快的一天:)是的,你的解决方案也有效。但是有点晚了。无论如何,谢谢。现在我有两个选择。干杯:)是的,你的解决方案也很有效。但有点晚了。无论如何,多谢。现在我有两个选择。干杯:)