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 相关问题。
我在服务的 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 相关问题。