.net WebApi OData + breeze => [Q] 未处理的拒绝原因(应为空)

6

我有一个使用OData EntitySetController的.NET 4.5 Web Api。

在客户端,我加载了以下js文件:

jquery.min.js
q.min.js
datajs-1.1.1.min.js
breeze.debug.js
toastr.min.js
angular.js

当我调用下面的JavaScript代码时:
breeze.config.initializeAdapterInstance("dataService", "OData");
var manager = new breeze.EntityManager(serviceName);

var query = breeze.EntityQuery.from("Customers");

return manager.executeQuery(query).then(success).fail(fail);

function success(data) {
  $log.info("Retrieved " + data.results.length);
  return data.results;
}

function fail(data) {
  $log.info("error " + data);
}

我在Chrome浏览器的网络选项卡中看到以下内容,显示元数据和JSON数据都返回完好...
Request URL:http://localhost:49971/odata/$metadata
Status Code:200 OK, 1.8KB

Request URL:http://localhost:49971/odata/Customers
Status Code:200 OK, 3.3KB

但是成功回调函数从未触发,失败回调函数被执行。请问有人能帮忙吗?我只看到这些。
XHR finished loading: "http://localhost:49971/odata/$metadata". datajs-1.1.1.min.js:14
XHR finished loading: "http://localhost:49971/odata/Customers". datajs-1.1.1.min.js:14
[Q] Unhandled rejection reasons (should be empty): 
[Error]
length: 0
__proto__: Array[0]
 q.js:1010
error Error: OK 

我接下来需要将这些数据绑定到ng-grid、ng-form中,最后将它们发送回服务器端数据库...

附带更多的代码和截图

breeze.EntityQuery
  .from("AddressTypes")
  .using(new breeze.EntityManager(serviceName))
  .execute()
  .then(function(data) {
    console.log(data); // never gets here very wierd
  }).fail(function(e) {
    console.log(e); // shows an error object with the AddressType Array
  });

我在失败回调中看到了AddresTypes数组... 更新:我已经暂时从后端切换到了BreezeContoller,而不是EntitySetController,并注释掉了。然后我在successCb中得到了我的数组。所以我认为我遇到了DataJS的问题。但我真的想坚持使用EntitySetController...

还有其他错误信息吗?看起来错误信息是“OK”很奇怪。 - Daniel Little
fail() 后面添加 .end() 将会移除 "Unhandled rejection reasons (should be empty)"。 - Daniel Little
.then(function(data) { console.log(data); }).fail(function(e) { console.log(e); }).end(); 未捕获的类型错误: 对象[object Object]没有'end'方法。 - August Bloom
啊,抱歉,应该是.done()而不是.end() - Daniel Little
输出现在是 '应该为空:[] q.js:621'。我知道这个输出是 Q.js 的设计。但事实仍然存在,即 successCb 从未被调用,并且数据嵌入了 failureCb 中。 - August Bloom
1个回答

1
我遇到了同样的问题。 事实证明,回到 datajs 1.0.3 版本似乎有效。 然而,这样做导致 $expand 不起作用(服务器可以正常工作,但 breeze 无法处理导航属性 -> 不考虑其多重性)。
我必须说,我很难找到一个稳定的 breezejs 等效物。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接