Promise resolution 传递 promise 而不是 value

Promise resolution passes promise instead of value

我在服务的 return 值上设置了成功回调,但是当我引用该值时,它是一个承诺,而不是我预期的简单类型(布尔值)。这是代码的基本结构:

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 的值,它是一个对象(已解决的承诺)。

我在我的代码的其他地方使用了 promises 并且没有遇到问题,但大多数时候我已经将 return 值分配给 $scope 中的变量,所以我想知道幕后是否发生了某种魔法。在那些其他地方,我 returning 复合对象而不是简单的值,所以我也想知道这是否与它有关。

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

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