0

当查询执行失败(例如保存时违反数据库约束)我可以在控制台中看到。

应该为空:[]

这是示例(您可以在控制台中看到应该为空:[])):

 breeze.EntityQuery
     .from("EntityThatDoesnotExist")
     .using(new breeze.EntityManager("http://todo.breezejs.com/api/todos"))
     .execute()
     .then(function () { })
     .fail(function () { });

http://jsfiddle.net/vMhkg/3/

我是 Breeze 和 Q 的新手,所以我的问题是:我应该忽略这个吗?还是我做错了什么?或者它可能只是一个需要报告的错误?

4

2 回答 2

1

其实我不认为这是一个错误。

这实际上是 Q(微风使用的承诺库)的“设计”行为,在承诺链没有被 done() 或 end() 调用终止的情况下。

从这个链接:https ://groups.google.com/forum/#!topic/q-continuum/TfV8TIYaCpc

该消息应该只在第一次构造被拒绝的承诺时写入浏览器中的控制台。这是一种防止未处理的拒绝被忽视的机制,如果程序员忘记使用 .done()、.end() 或 .nodeify() 终止一系列承诺,就会发生这种情况。不幸的是,一旦将消息写入控制台,就无法将其删除。但是,浏览器控制台提供了数组内容的实时视图。当拒绝得到处理时,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'
});
于 2013-03-18T17:46:48.533 回答
0

这是一个完整的长镜头。我在过去 2 小时内遇到了同样的错误,非常困惑。我最终调试到了breath.debug.js,发现我试图保存的日期无效。一旦我更正了日期问题(将所有内容都转换为 UTC),应该为空:[] 消息就消失了。无论如何,我可以在第 3604 行看到在 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;
            }
        });
于 2013-03-18T00:13:29.967 回答