Sto usando Oboe.js di analizzare un file di grandi dimensioni davvero JSONnon gestita promessa rigetto nei promesse asincroni
const promises = [];
oboe('http://domain/my-file.js')
.node('items.*', item => {
// parseItem() returns a rejected Promise because of invalid JSON items
promises.push(parseItem(item));
})
.done(() => {
Promise.all(promises).then(() => {
doSomething();
});
})
Ma la mia console Browser si allaga con Uncaught (in promise)
. Lo stesso accade se si scrive una promessa in un setTimeout()
come
const promises = [];
setTimeout(() => {
promises.push(Promise.reject());
}, 500);
// some time in the future
Promise.all(promises);
cosa veramente strana: i browser moderni comportano in modo diverso. In Firefox Developer Edition tutto funziona senza i messaggi di errore e in Chrome sono inondato di Uncaught (in promise)
. In Chrome ricevi immediatamente il messaggio se scrivi Promise.reject();
senza un fermo. In Firefox e Safari non succede niente.
Quindi qual è la soluzione per questo? Ignorando il messaggio? Voglio dire se questo comportamento è davvero nelle specifiche ufficiali di promessa, quindi le promesse in codice asincrono non hanno molto senso per me.
Attualmente ci sono due campi di persone per quanto riguarda le promesse di es6. Un campo (gli sviluppatori di Chrome inclusi) considerano il modo in cui si utilizzano le promesse come un uso improprio. Il comportamento che stai vivendo non è nelle specifiche per le promesse nonostante ci siano diverse proposte perché l'altro campo continua a ribattere dicendo che casi come il tuo sono rilevanti. Sfortunatamente, alcuni dei browser hanno aggiunto promesse di rifiuto non gestite, nonostante la mancanza di specifiche e nonostante il respingimento. –
@MicahZoltu per essere onesti, i campi sono divisi anche tra gli sviluppatori di Chrome. –
@MicahZoltu grazie per i chiarimenti. Al momento è davvero confuso quale implementazione sarà quella giusta. – LongFlick