我想分享这个,因为它已经困扰了我几次,我总是在错误的地方调试这个问题-
我会做像这样的事情-
var foo = ko.observableArray();
datacontext.getFoo(foo, someId)
.then(doSomethingElse)
.fail(youFail);在我的数据上下文中,我会从本地存储中返回一些内容
var getFoo = function (fooObservable, id) {
var query = EntityQuery.from('Foozballs')
.where('id', '==', id)
.orderBy('id');
return manager.executeQueryLocally(query)
.then(querySucceeded)
.fail(queryFailed);
}并且会不断地返回错误,声明
Object [Object array] has no method 'then'请看下面的答案,我认为是什么导致了它,如果有人想要改善答案,这是很好的。
发布于 2013-05-17 00:32:11
正如另一个答案所提到的,executeQueryLocally是同步的,并且立即返回。如果您想要查询缓存,但仍然使其“看起来”是异步的,最简单的方法是在FetchStrategy.FromLocalCache.中使用executeQuery方法即将您的代码更改为
var getFoo = function (fooObservable, id) {
var query = EntityQuery.from('Foozballs')
.where('id', '==', id)
.orderBy('id')
.using(FetchStrategy.FromLocalCache);
return manager.executeQuery(query)
.then(querySucceeded)
.fail(queryFailed);
}请注意,这里使用executeQuery而不是executeQueryLocally。
发布于 2013-05-16 23:19:00
问题是,executeQueryLocally是同步完成的,因为它来自本地存储,因此当它完成时,您不能使用'then‘。解析回调的正确方法是在本地执行查询,然后返回
return Q.resolve(); 在查询完成时返回回调。
https://stackoverflow.com/questions/16591336
复制相似问题