Ich bin sehr verwirrt, warum manchmal, wenn ich eine Kombination einer Instanz einer Klasse mit einem Versprechen verwende, ich zwei Arten von Fehlern erhalte. Wenn ich Promise.all() mit zwei oder drei verketteten Versprechen verwende, bekomme ich manchmal nur einen Fehler einer undefinierten Variable innerhalb des Callbacks. Wenn ich eine komplizierte Klasse mit mehreren Eigenschaften und Methoden habe, habe ich eine undefinierte Instanz meiner Klasse mit meiner . Dann() Wenn meine Klasse einfach ist und ich nur ein oder zwei Kettenversprechen verwende, habe ich keine Fehler. Hat jemand eine Idee, warum das so sein könnte? Hier ist ein Beispiel für die Codestruktur Ich bin mit dem Ziel für:ES6 Versprechen und Klassenkonflikt
(Der Code führt ordnungsgemäß in der neuesten Firefox Nightly, aber nicht in Chrome 47)
'use strict';
class Controller {
\t constructor() {
\t \t this.data = 'data';
\t \t this.moredata = 'data';
\t \t this.evenmore = ['a', 'b', 'c'];
\t \t this.dataobj = {"a" : "1", "b" : "2", "c" : "3"};
\t }
}
//BLOCKED CODE
{
\t let cc = new Controller();
\t let loadeddata = null;
\t
\t let xhr = $.getJSON('chapters.json', {}, (response) => {
\t \t loadeddata = response; //SOMETIMES IF CLASS IS COMPLEX IS NOT DEFINED (SOMETIMES IT IS)
\t }).fail(() => {
\t \t console.log('Failed to load JSON data!');
\t });
\t
\t let xhr2 = $.getJSON('chapters.json', {}, (response) => {
\t \t loadeddata = response;
\t }).fail(() => {
\t \t console.log('Failed to load JSON data!');
\t });
\t
\t let xhr3 = $.getJSON('chapters.json', {}, (response) => {
\t \t loadeddata = response;
\t }).fail(() => {
\t \t console.log('Failed to load JSON data!');
\t });
\t
\t let xhr4 = $.getJSON('chapters.json', {}, (response) => {
\t \t loadeddata = response;
\t }).fail(() => {
\t \t console.log('Failed to load JSON data!');
\t });
\t
\t
\t //SOMETIMES WITH COMPLICATED CLASS WITH ONE OR TWO PROMISES DOES NOT THROW ERROR
\t Promise.all([xhr, xhr2, xhr3, xhr4]).then(() => {
\t \t console.log(loadeddata);
\t \t console.log(cc); //SOMETIMES CC IS NOT DEFINED (SOMETIMES IT IS)
\t });
}
Warum Sie mischen Einheimische Versprechen mit jQuery defers? – Amit
Kannst du etwas Code posten, der den Fehler demonstriert, anstatt "ein Beispiel für die Code-Struktur, die ich anstrebe" - es ist schwer zu sehen, was du in deinem Code falsch machst, wenn du nicht Code schreibst, der etwas falsch macht –
Ich habe den Code aktualisiert, der einen Fehler anzeigt. Das Seltsame ist, dass ich der Klasse langsam Eigenschaften hinzufügte und dann ein weiteres Versprechen hinzufügte, und ich endete mit dem gleichen Fehler wie zuvor, aber wenn ich nur eine Sache lösche, wie zum Beispiel das Versprechen, bekomme ich immer noch einen Fehler, während ich es vorher getan habe nicht. –