服务返回的对象的属性不可用

时间:2014-07-27 16:34:15

标签: javascript angularjs angularjs-resource

我有一个用户可以注册帐户的网页。我做了一个简单的指令,检查是否已经使用了用户名,如果是的话,它应该使表单字段无效。

我的指令调用一个PHP Web服务,它检查数据库并返回一个具有该用户名状态的JSON对象。

我的指示看起来像这样:

link: function(scope, elm, attrs, c) {
    elm.bind('blur', function() {
        var result = accountService.uniqueUser(elm.val());
        console.log(result);
        console.log('A: '+result.usernameIsTaken);
    }
});

如你所见,我做了两个console.logs。第一个返回:

Resource {$promise: Object, $resolved: false, $get: function, $save: function, $query: function…}
$promise: Object
$resolved: true
usernameIsTaken: false
__proto__: Resource

因为你可以看到它“应该”包含属性userNameIsTaken。但是当第二个console.log被触发时,它会返回:

A: undefined

为什么我不能那样访问那个属性?当第一个undefined清楚地表明它应该在那里时,为什么它会给我console.log

这里有什么我想念的吗?

1 个答案:

答案 0 :(得分:0)

您的问题是您正在向服务器发出异步请求,但期望其结果立即可用。

相反,您可以将成功回调传递给$promise上的Resource对象,以便在数据可用后对其进行处理:

result.$promise.then(function(data) {
   console.log(data.usernameIsTaken);
});