我有一个用户可以注册帐户的网页。我做了一个简单的指令,检查是否已经使用了用户名,如果是的话,它应该使表单字段无效。
我的指令调用一个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
?
这里有什么我想念的吗?
答案 0 :(得分:0)
您的问题是您正在向服务器发出异步请求,但期望其结果立即可用。
相反,您可以将成功回调传递给$promise
上的Resource
对象,以便在数据可用后对其进行处理:
result.$promise.then(function(data) {
console.log(data.usernameIsTaken);
});