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

実際、これはバグではないと思います。

これは、Promise チェーンが done() または end() 呼び出しで終了しない場合の Q (breeze が使用する promises ライブラリ) の実際の「設計どおり」の動作です。

このリンクから: https://groups.google.com/forum/#!topic/q-continuum/TfV8TIYaCpc

メッセージは、拒否された promise が最初に作成されたときにのみ、ブラウザーのコンソールに書き込まれる必要があります。これは、プログラマーが .done()、.end()、または .nodeify() でプロミスのチェーンを終了するのを忘れた場合に発生する可能性がある、未処理の拒否が見過ごされるのを防ぐためのメカニズムです。残念ながら、メッセージがコンソールに書き込まれると、削除することはできません。ただし、ブラウザー コンソールは、配列の内容をリアルタイムで表示します。拒否が処理されると、Q は配列から「理由」を削除します。したがって、コンソールに Should be empty: [] と表示されていれば、何も問題はありません。

また、完全を期すために、失敗のケースを実際に処理すると、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時間以内に同じエラーが発生し、かなり混乱しました。結局breeze.debug.jsにデバッグし、保存しようとしていた無効な日付があることを発見しました。日付の問題を修正すると(すべてをUTCに変換)、Should be empty:[]メッセージが消えました。とにかく、BreezeのvalidateTargetメソッドで失敗していた実際の検証を3604行目で確認できました。実際のチェックは、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 に答える