【发布时间】:2016-01-12 07:32:42
【问题描述】:
我正在创建一个工厂以从一个页面获取用户 ID,调用 REST API,并在以下视图中返回结果。我最初的尝试主要取自this answer,但是 - 不出所料 - 我一直陷入无法及时响应并且get() 方法返回一个空数组的情况。
这是工厂本身
app.factory('GetMessages', function() {
var messages = []
function set(userId) {
Restangular.all('/api/messages/').getList({'_id': userId}).then(function(docs){
messages = docs
})
}
function get() {
return messages;
}
return {
set: set,
get: get
}
});
对于它的价值,我可以毫不费力地将 userId 放入工厂,因为它只是通过这样的函数传入
查看:
<a ng-click='passToFactory(message.user.id)' href='/home/inbox/reply'>Reply</a>
控制器:
$scope.passToFactory = function(id) {
GetMessages.set(id);
};
以下视图的控制器只是
$scope.messages = GetMessages.get()
我遇到的问题是,在工厂返回空集后,无法识别工厂的进一步更改(即使经过一段时间后它确实从 API 获得了正确的响应)并且$scope.messages 仍然为空。
我已尝试将 API 调用移至 get 方法(这没有奏效,因为 get 方法通常无法及时获得 userId)并且我找不到使用承诺的方法强制get() 等待set() 完成。
我更愿意在最终的解决方案中继续使用 Restangular,但这是一件小事,花费了太多时间,因此任何修复都有效。
我对 Angular 还很陌生,所以我确信有一些非常明显的东西,但现在我迷路了。谢谢。
【问题讨论】:
-
userId在哪里?为什么你拿不到? -
啊抱歉我应该把视图放在那里(现在编辑它。)获取 userId 没问题 - 它只是通过一个函数传入并每次都正确登录到控制台
-
如果你的 'get' 方法返回了 Promise,那么你可以在控制器中执行 'then' 而不必担心任何竞争条件。
-
我不太明白这个问题很好。你能解释一下为什么比赛会出现问题吗?你能告诉我们你在哪里以及如何使用 get 函数。
标签: javascript angularjs restangular