Breeze 查询失败,错误消息为数据

Breeze 查询失败,错误消息为数据,breeze,Breeze,一位朋友的询问失败了。幸运的是,他在失败回调中捕捉到了它(您确实对每个服务器调用都有一个失败回调,对吗?)。以下是他所拥有的: var getPersons = function(personsObservable) { return EntityQuery.from('Person') .using(manager).execute() .then(querySucceeded).fail(queryFailed); } function q

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

var getPersons = function(personsObservable) { return EntityQuery.from('Person') .using(manager).execute() .then(querySucceeded).fail(queryFailed); } function queryFailed(error) { var msg = 'Error retreiving data. ' + error.message; logError(msg, error); throw error; } WAT? 他检查了
error.XHR
,它提供了用于此查询的完整AJAX XHR对象。他可以看到HTTP状态码是200。。。这意味着服务器上的一切都很酷。事实上,他拥有真实的数据,也说明了同样的问题

那么为什么微风会减弱呢?他是如何诊断问题的?

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

首先检查您的成功 如果操作失败,则可以调用失败回调(1);如果成功回调失败,则可以调用失败回调(2)。如果操作失败,您将遇到与微风相关的问题。如果成功回调失败,则可能存在应用程序代码问题

要确定是哪一行,请在成功回调的第一行上放置一个断点(在他的例子中,
querysucceed的第一行)。如果你碰到了断点,你就知道Breeze已经尽了自己的一份力,并且已经交给了你。一步一步地回拨,找出最有可能是你自己的错误,因此很容易修复

检查自定义EntityType构造函数和初始值设定项 在他的情况下,它没有成功回调。因此,当Breeze试图从服务器的JSON数据中生成缓存实体时,出现了一些问题。那会是什么

有许多潜在的原因。可能是微风虫。不过,最好还是先消除导频误差。您是否为此
EntityType
编写了一个应用程序

是的。他有一个初始值设定项,将
全名
计算属性添加到他的
个人
。它看起来有点像这样:

"[{"$id":"1","$type":"Person, ProjectName","Id":12,"FirstName":"Bob","LastName":"Smith","Email":"bs@contoso.com","Blog":"http://bs.contoso.com","Twitter": ..." metadataStore.registerEntityTypeCtor('Person', null, personInitializer); function personInitializer(person) { person.fullName = ko.computed(function () { return entity.firstName() + ' ' + person.lastName(); }); } metadataStore.registerEntityTypeCtor('Person',null,personInitializer); 函数拟人初始化器(person){ person.fullName=ko.computed(函数(){ 返回entity.firstName()+''+person.lastName(); }); } 他看不出有什么问题。但是在诊断过程之后,他在初始化器上设置了一个断点

果然。。。他有一个打字错误

// "entity" does not exist. Null object error return entity.firstName() + ' ' + person.lastName(); //“实体”不存在。空对象错误 返回entity.firstName()+''+person.lastName(); 当他把
实体
换成
时,一切都很好

我现在无法解释为什么空对象引用在消息中的JSON
Person
数据中显示为Q promise
fail
错误。JavaScript中发生了奇怪的事情。但线索就在那里:

  • 服务器提供了数据
  • 在进入成功回调之前失败
  • 数据是关于
    人的
  • 拥有
    人员
    初始值设定项(或构造函数)
阅读这些线索,你就会知道去哪里找

希望这条建议能让你避免白发和秃头