Wir sind ziemlich ratlos, weil niemand feststecken kann, wenn das passiert.
Würden Sie uns alle einen Gefallen tun und Ihre breeze.debug.js modifizieren, um mehr Informationen über den Stand der Dinge zu erhalten, wenn sie ausgelöst wird?
Vielleicht können Sie hinzufügen:
} else {
console.log("** Aaargh! 'curContext.prevContext': " + curContext.prevContext +
" 'context.prevContext': " + context.prevContext);
throw new Error("Illegal construction - use 'or' to combine checks");
}
dem Strohhalm greifen. Alle Infos helfen.
Update 26 Feb 2014
AHA! Danke @steve, @matthias und anderen!
Wie ich privat vermutet habe, etwas, irgendwo, hat sich entschieden, prevContext zu undeclared
statt null
setzen. Ich würde empfehlen, dass wir sowieso zu "==" wechseln ... was für beide Fälle gilt. Falschheit ist gut genug, IMO. Wir melden uns bei Ihnen, wenn wir dies tun (vorausgesetzt, niemand im Breeze-Team wendet sich gegen die Anwendung eines Fixes, das wir nicht testen können).
-Update 27. Februar 2014
ich meine DocCode Tests mit breeze.min.js
in Chrome v33 und sie alle Pass läuft.Frustrierend. Jay wird seine Tests mit breeze.min.js
auch in Chrome v33 durchführen ... und wir werden sehen, ob einige von ihnen für ihn scheitern. Ich bin nicht hoffnungsvoll.
ich das erwartete Verhalten für sinnvoll (einschließlich der illegalen) Variationen von parm
(undefined
, null
, true
, false
, ein string
) auf der Linie von getEntityType
die @Matthias
erwähnt
assertParam(parm, "okIfNotFound").isBoolean().isOptional().check(false);
Meine statische Analyse der Code (wer vertraut dass?) sagt mir, dass der erste Vergleichsoperator ===
bleiben muss, während der Vergleichsoperator in der zweiten Klausel entweder ==
oder ===
sein kann. Der Autor des Codes arbeitete hart, um sicherzustellen, dass der linke Operand in der Praxis nie undefined
war; meine statische Analyse zeigt, dass es könnteundefined
werden ... obwohl ich nicht in der Lage bin, die Welt so zu arrangieren, dass es passiert. Vielleicht ein Versagen der Vorstellungskraft.
Meine statische Analyse des verkleinerten Code sagt, dass es richtig ist, obwohl meine minimierte Version von Ihnen anders, vielleicht weil mein gegen eine sich entwickelnde Kopie breeze.debug.js minimierte ist (irgendwo näher an, was v. 1.4.9 wird sein).
// Reformatted w/ spaces and new lines for readability.
// Observe that the minifier reversed the direction of the second null test!
// That is smart and does no harm
// I can assure you the pre-minified code is the same as what you folks are reporting.
function m(a,b) {
if(a._context){
for(var c=a._context; null!=c.prevContext;) c=c.prevContext;
if(null === c.prevContext) return c.prevContext=b, a;
if(null !== b.prevContext)
throw new Error("Illegal construction - use 'or' to combine checks");
b.prevContext=a._context
}
return n(a,b)
}
Unter diesen schwierigen Umständen, es sei denn wir eine versagende Test finden können, werden wir einen Sprung des Glaubens machen, ein Huhn schlachten, rattern einige Knochen und den Code dies ändern:
if (curContext.prevContext === null) {
curContext.prevContext = context;
// just update the prevContext but don't change the curContext.
return that;
} else if (context.prevContext == null) { // CHANGED TO "if null or undefined"
context.prevContext = that._context;
} else {
throw new Error("Illegal construction - use 'or' to combine checks");
}
Wenn Sie die Zeit nutzen können, versuchen Sie dies bitte in Ihren Apps und bestätigen Sie, dass alles in Ordnung ist.
Wir versenden v.1.4.9 morgen (28 Feb) so Bitte versuchen Sie dies pronto!
+1! Habe diesen Fehler auch bekommen – GETah
Wir bekommen diesen Fehler auch. Bedenkt man, dass wir den Fehler in anderen Browsern (IE) nicht erhalten, dass wir die Version von breeze oder den Code, der darauf zugreift, nicht geändert haben und dass Google letzte Woche eine neue Version von Chrome veröffentlicht hat, denke ich das sehr gut könnte an der neuen Chrome-Version liegen. Vielleicht ein Bug in Chrome oder Brise oder etwas subtiler als eine Inkompatibilität oder die Verwendung von fragwürdigem/problematischem JavaScript-Code. – steve
@steve Dies hängt definitiv mit dem neuesten Chrome-Update zusammen. In dem Moment, in dem ich von Version 32 auf 33 aktualisiert habe, habe ich angefangen, dieses Problem zu sehen. – larspars