如何通过`$ resource`中的return返回`$ promise.then`值?

时间:2016-02-18 11:53:33

标签: angularjs angular-resource

从其中一个服务中,我retuning是后端输出。我正在获取值,但是如何从返回的对象中获取结果值?

这是我的代码:

var queryConractorInfo = function ( server, contractorParams ) {

            return server.contractorInfo.get(contractorParams)
                  .$promise.then(function ( contractorInfo ) {

                    return contractorInfo;

            })

}

这是我的电话:

console.log( queryConractorInfo( server, contractorParams) );

这是我得到的输出:

{
  "$$state": {
    "status": 1,
    "value": { // i want to get this from returned object.
      "ActualPercentage": "33.5",
      "AllWeeks": [
        "/Date(1446930000000+0300)/",
        "/Date(1446498000000+0300)/",
        "/Date(1439154000000+0300)/",
        "/Date(1438635600000+0300)/",
        "/Date(1436043600000+0300)/",
        "/Date(1431550800000+0300)/",
        "/Date(1389733200000+0300)/",
        "/Date(1332277200000+0300)/"
      ]
}
}
}

我试过这样:

var queryConractorInfo = function ( server, contractorParams ) {

            return server.contractorInfo.get(contractorParams)
                  .$promise.then(function ( contractorInfo ) {

                    return contractorInfo.promise;
                    //adding promise but not working

            })

}

2 个答案:

答案 0 :(得分:1)

据我了解你的情况,你似乎一直坚持要回来。

这不是承诺的方式。从promise回调(或解析函数)返回只会将数据传递给下一个.then()函数。你可以链接许多然后调用

var queryContractorInfo = function ( server, contractorParams ) {

    return server.contractorInfo.get(contractorParams)
        .$promise.then(function ( contractorInfo ) {

            // This will return to the next .then() call
            return contractorInfo;
        })
        .then(function(contractorInfo) {

            // Another then call, understand?
        });
}

它基本上就像这样工作

// Outer variable, initialized to null (use an empty object if you prefer)
var queryContractorInfo = null;

server.contractorInfo.get(contractorParams)
    .$promise.then(function ( contractorInfo ) {

        // Now I can set queryContractorInfo
        queryContractorInfo = contractorInfo;

        // You can return, but you don't need to, if this is the final then
    });

只要查询正在进行,queryContractorInfo就为空。得到结果后,变量将设置为结果数据。在then函数中,如果你想使用这个变量,你现在可以触发更多的函数。

答案 1 :(得分:0)

你想要实现的目标有点不清楚,但这应该对你有所帮助。 我想你想从你得到它的函数返回JSON对象吗?

假设您将该函数称为

myFuncToGetJSON().then(function(result){
    //result is the JSON object you are expecting
});

在你获得JSON的函数中

function myFuncToGetJSON(){
    var deferred = $.Deferred(); // create a deferred object
    //do steps to generate JSON
    deferred.resolve(theJSONYouHaveGenerated);
    return deferred.promise();
}

更多帮助 HERE