Sono molto confuso sul motivo per cui a volte quando uso una combinazione di un'istanza di una classe con una promessa ottengo due tipi di errori. Se utilizzo Promise.all() con due o tre promesse concatenate, a volte ricevo solo un errore di una variabile non definita all'interno del callback. Quando ho una classe complicata con proprietà e metodi multipli, ho un'istanza indefinita della mia classe con il mio .then() Se la mia classe è semplice e io uso solo una o due promesse concatenate, non ho errori. Qualcuno ha qualche idea del perché questo potrebbe essere? Ecco un esempio della struttura del codice sto puntando:Conflitto di classe e promessa ES6
(il codice viene eseguito correttamente l'ultimo Firefox Nightly, ma non 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 });
}
Perché sei mescolando promesse native con i defender jQuery? – Amit
Puoi pubblicare un codice che mostri l'errore, piuttosto che "un esempio della struttura del codice che sto puntando" - è difficile vedere cosa stai facendo nel codice errato se non inserisci il codice che sta facendo qualcosa di sbagliato –
Ho aggiornato il codice che mostra un errore. La cosa strana è che lentamente ho aggiunto delle proprietà alla classe e poi ho aggiunto un'altra promessa, e ho finito con lo stesso errore di prima, ma se elimino solo una cosa come la promessa, ottengo ancora un errore mentre prima facevo non. –