javascript - Promise 决议传递的是 Promise 而不是值(value)

标签 javascript angularjs angular-promise angular-resource

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

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 的值对于控制台,它表明这是一个 promise ,而不是像我期望的那样是 bool 值。同样,如果我检查 z.attr 的值在调试器中,它是一个对象(已解决的 promise )。

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

最佳答案

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

参见this answer到相关问题了解详细信息。

关于javascript - Promise 决议传递的是 Promise 而不是值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34930932/

相关文章:

php - 如何将 PHP 变量值分配给 JavaScript 变量

javascript - 在 Angularjs 中的 ng-keypress 上获取文本框的值

javascript - AngularJS,$http.get() 和 "controller as"

javascript - Angular 用户界面 Bootstrap : promise resolved/rejected when modal closed

angular - Promises 和 Observables 有什么区别?

javascript - 在异步函数调用之外使用变量

javascript - ajax调用后删除元素

javascript - JSON 语法错误 - JSON.parse

javascript - 如何管理 Angular js 依赖关系和模块化?

javascript - 我如何在 angularjs 中使用 $q.all(promises)