【问题标题】:Query failed and the error.message is the data查询失败,error.message 是数据
【发布时间】:2013-02-09 04:22:52
【问题描述】:

朋友的查询失败。幸运的是,他在他的失败回调中捕捉到了它(你确实为每个服务器调用都有一个失败回调,对吧?)。以下是他所拥有的:

var getPersons = 函数(personsObservable){ return EntityQuery.from('Person') .using(manager).execute() .then(querySucceeded).fail(queryFailed); } 函数查询失败(错误){ var msg = '获取数据时出错。 ' + 错误消息; 日志错误(消息,错误); 抛出错误; }

error.message 只是显示了 JSON 数据...看起来有点像这样:

"[{"$id":"1","$type":"Person, ProjectName","Id":12,"FirstName":"Bob","LastName":"Smith","Email":" bs@contoso.com","博客":"http://bs.contoso.com","Twitter": ..."

WAT? 他检查了error.XHR,它提供了用于此查询的完整 AJAX XHR 对象。他可以看到 HTTP 状态码是 200 ......这意味着服务器上的一切都很酷。他拥有真实数据这一事实几乎说明了同样的事情。

那么,Breeze 为什么会失败?他是如何诊断问题的?

【问题讨论】:

    标签: breeze


    【解决方案1】:

    Breeze 可能失败了。但问题很可能出在其他地方。通常如果 Breeze 失败,会有一个有意义的错误消息。此错误消息没有意义。但它确实提供了线索。

    先检查你的成功回调

    如果操作失败或(2)如果成功回调失败,可以调用失败回调。如果操作失败,您将遇到与 Breeze 相关的问题。如果成功回调失败,则可能是应用程序代码有问题。

    要确定哪个,在成功回调的第一行(在他的例子中,querySucceeded 的第一行)放置一个断点。如果你到达断点,你就知道 Breeze 已经完成了它的工作并且已经交给你了。逐步检查您的回调,找出最有可能是您的错误,因此很容易修复。

    检查您的自定义 EntityType 构造函数和初始化程序

    在他的情况下,它没有到达成功回调。所以当 Breeze 试图从服务器的 JSON 数据中创建缓存的实体时出现了问题。那会是什么?

    有很多潜在的原因。可能是微风错误。但是,始终最好首先消除飞行员的错误。你为这个EntityType写了custom constructor or initializer吗?

    他做到了。他有一个初始化程序,将fullName 计算属性添加到他的Person。它看起来像这样:

    metadataStore.registerEntityTypeCtor('Person', null, personInitializer); 函数personInitializer(人){ person.fullName = ko.computed(function () { 返回 entity.firstName() + ' ' + person.lastName(); }); }

    他没有发现问题。但是按照诊断程序,他在初始化程序上放置了一个断点

    果然……他打错字了……

    // “实体”不存在。空对象错误 返回 entity.firstName() + ' ' + person.lastName();

    他将entity 更改为person 后,一切都很好。

    目前我无法解释为什么 null 对象引用表现为 Q 承诺 fail 错误以及消息中的 JSON Person 数据。奇怪的事情发生在 JavaScript 中。但线索就在那里:

    • 服务器传送数据
    • 在到达成功回调之前失败
    • 数据大约是Person
    • 有一个Person 初始化器(或构造器)

    阅读线索,你就会知道去哪里找。

    希望这个提示可以帮助您避免白发和秃头。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-28
      • 2013-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多