首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Object [Object array]或[Object object]没有方法'then‘

Object [Object array]或[Object object]没有方法'then‘
EN

Stack Overflow用户
提问于 2013-05-16 23:17:16
回答 2查看 2K关注 0票数 0

我想分享这个,因为它已经困扰了我几次,我总是在错误的地方调试这个问题-

我会做像这样的事情-

代码语言:javascript
复制
var foo = ko.observableArray();
datacontext.getFoo(foo, someId)
     .then(doSomethingElse)
     .fail(youFail);

在我的数据上下文中,我会从本地存储中返回一些内容

代码语言:javascript
复制
  var getFoo = function (fooObservable, id) {
        var query = EntityQuery.from('Foozballs')
            .where('id', '==', id)
            .orderBy('id');

        return manager.executeQueryLocally(query)
            .then(querySucceeded)
            .fail(queryFailed);
  }

并且会不断地返回错误,声明

代码语言:javascript
复制
Object [Object array] has no method 'then'

请看下面的答案,我认为是什么导致了它,如果有人想要改善答案,这是很好的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-17 00:32:11

正如另一个答案所提到的,executeQueryLocally是同步的,并且立即返回。如果您想要查询缓存,但仍然使其“看起来”是异步的,最简单的方法是在FetchStrategy.FromLocalCache.中使用executeQuery方法即将您的代码更改为

代码语言:javascript
复制
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。

票数 1
EN

Stack Overflow用户

发布于 2013-05-16 23:19:00

问题是,executeQueryLocally是同步完成的,因为它来自本地存储,因此当它完成时,您不能使用'then‘。解析回调的正确方法是在本地执行查询,然后返回

代码语言:javascript
复制
return Q.resolve(); 

在查询完成时返回回调。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16591336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档