首页 > 解决方案 > 在服务中调用承诺后无法在我的控制器中获取值

问题描述

我有一个在服务中调用函数的控制器。这反过来又在同一个服务中调用了一个 promise 函数。

问题是我无法在控制器中获取返回值。

控制器:

    function mainFunctionInControlelr() {       
       some code here...
       vm.evtHTTPFactory.getData() // calling the service
        .then(function(response) {
            console.log("the returned value is " + response.myReturned );
        });

               }

服务:

    factory.getData = function(parm) { 
        return factory.getABC(parm); // calling another method in the same service
    };      



    factory.getABC = function(parm) { 
        return $q(function(resolve, reject) {
            $http.get(PltConfig.APIPath + '/v1/............', {
                params: { inputParm: parm }
            })
            .success(function (response) {
                resolve(response.data.myReturned);
                return;
                } ) 
            });
        };

问题是服务内部的 getData 正在调用服务内部的 getABC。在这个过程中丢失了一些东西。我需要在控制器中有“myReturned”。

我需要在 getData (在服务中)中放入什么才能使事情正常进行?

多谢。

标签: angularjspromise

解决方案


我会使用异步等待......像这样:

在您的函数 getData 中:

factory.getData = async function(parm) { 
    var data = await factory.getABC(parm);
    return data;
};

在您的功能控制器中:

async vm.evtHTTPFactory.getData() {
  var myResp = await vm.evtHTTPFactory.getData()
  console.log(myResp)}

这里的一个例子:https ://jsfiddle.net/hernangiraldo89/frv4L2jh/4/

我希望它对你有帮助!


推荐阅读