当查询执行失败时(例如保存时数据库约束违规)我可以在控制台中看到。
应为空:[]
以下是示例(您可以在控制台中看到应为空:[] )):
breeze.EntityQuery
.from("EntityThatDoesnotExist")
.using(new breeze.EntityManager("http://todo.breezejs.com/api/todos"))
.execute()
.then(function () { })
.fail(function () { });
我是Breeze和Q的新手,所以我的问题是:我应该忽略这个吗?或者我做错了什么?或者它可能只是一个报告的错误?
答案 0 :(得分:1)
其实我不认为这是一个错误。
这实际上是在没有使用done()或end()调用终止promise链的情况下Q(微风使用的promises库)的“按设计”行为。
来自此链接:https://groups.google.com/forum/#!topic/q-continuum/TfV8TIYaCpc
该消息应该只在浏览器中写入控制台, 第一次构建被拒绝的承诺。这是一种机制 防止未经处理的拒绝被忽视,如果发生这种情况就会发生 程序员忘记用.done()终止一连串的承诺, .end()或.nodeify()。不幸的是,一旦消息一直存在 写入控制台,无法删除。但是,浏览器 console提供了对数组内容的生动视图。什么时候 拒绝被处理,Q从数组中删除“原因”。 因此,如果您在控制台上看到应该为空:[],则没有 错。
另外,为了完整起见,如果您要真正处理失败案例,您将在e.message中收到有意义的错误消息,即
breeze.EntityQuery
.from("EntityThatDoesnotExist")
.using(new breeze.EntityManager("http://todo.breezejs.com/api/todos"))
.execute()
.then(function () {
// will not get here.
}) .fail(function (e) {
// e.message will contain a message something like:
// No HTTP resource was found that matches the request URI
// http://localhost:7149/api/NorthwindIBModel/EntityThatDoesnotExist'
});
答案 1 :(得分:0)
这是一个完整的远景。我刚刚在最近2小时内遇到了同样的错误而且很困惑。我最终调试到breeze.debug.js并发现我有一个无效的日期,我试图保存。一旦我更正了日期问题(将所有内容转换为UTC),应该为空:[]消息消失了。无论如何,我可以在第364行的Breeze中看到validateTarget方法中失败的实际验证,实际检查是在第3615行进行的。
不确定这对你是否会有所帮助,但是我只是看到同样的错误,我认为分享我的经验会很痛苦。
仅供参考,以下是我调试的验证方法以获取更多信息。
function validateTarget(target) {
var ok = true;
var stype = target.entityType || target.complexType;
var aspect = target.entityAspect || target.complexAspect;
var entityAspect = target.entityAspect || target.complexAspect.entityAspect;
stype.getProperties().forEach(function (p) {
var value = target.getProperty(p.name);
var propName = aspect.propertyPath ? aspect.propertyPath + "." + p.name : p.name;
if (p.validators.length > 0) {
var context = { entity: entityAspect.entity, property: p, propertyName: propName };
ok = entityAspect._validateProperty(value, context) && ok; //This is where I put my break point to see what was actually failing.
}
if (p.isComplexProperty) {
ok = validateTarget(value) && ok;
}
});