承诺决议通过承诺而不是价值

时间:2016-01-21 17:55:58

标签: javascript angularjs angular-promise angular-resource

我对从服务返回的值设置成功回调,但是当我引用该值时,它是一个promise而不是像我预期的那样的简单类型(boolean)。这是代码的基本结构:

var ZService = $resource('api/w/:id/zs'); // returns a list of Zs
var XService = $resource('api/x/:id/hasAttribute'); // returns a boolean value
$scope.zList = ZService.query({id:$scope.w.id});
$scope.zList.$promise.then(function(zs) {
    for(var i=0; i<zs.length; i++) {
        (function(i) {
            var z = zs[i];
            XService.get({id:z.x.id}).$promise.then(function(has) {
                console.log("has: " + has);
                z.attr = has;
            });
        })(i);
    }
}

在我看来,我正在使用<span ng-show="z.attr == true">(在z in zList转发器中)并且该范围永远不会显示。如果我将has的值记录到控制台,它会显示它是一个承诺,而不是像我期望的那样的布尔值。同样,如果我在调试器中检查z.attr的值,它就是一个对象(已解析的promise)。

我在我的代码中的其他地方使用过promise并没有出现问题,但大多数时候我已经将返回值分配给$scope内的变量,所以我想知道是否幕后有一种魔力。在其他地方,我正在返回复合对象,而不是简单的值,所以我也想知道这是否与它有关。

1 个答案:

答案 0 :(得分:1)

问题是$resource需要一个对象或一个对象数组。它不适用于原始值。当它检索一个对象时,它会添加便利方法,例如$save,否则这是不可能的。

有关详细信息,请参阅this answer相关问题。