Trappole comuni delle Promesse
Evitare gli errori comuni
Le promise non funzionano come gli altri valori
Non puoi stamparne il valore come faresti con la maggior parte dei valori:
// Questo non ha senso con le promise:console.log(Promise.resolve(42));
// Dobbiamo utilizzare l'interfaccia `.then`:Promise.resolve(42).then(value => console.log(value));Le promise non ti avvertono quando commetti un errore
Beh, un errore probabile.
Per diversi motivi, il comitato TC39 ha deciso che .then e .catch possono ricevere null. Per esempio, .then(null, null) è valido e il comportamento richiesto è saltare quel “passo” nella catena.
La conseguenza spiacevole di questa decisione è che è molto facile combinare pasticci.
Per esempio
Consideriamo una piccola sfida: quale/i delle seguenti opzioni eseguirà/no console.log per stampare 42?
// Opzione #1:Promise.resolve(42).then(console.log());
// Opzione #2:Promise.resolve(42).then(console.log);
// Opzione #3:Promise.resolve(42).then(value => console.log(value));
// Opzione #4:Promise.resolve(42) .then(console.log()) .then(console.log);La risposta
La risposta è #2, #3 e #4.
Perché? Analizziamo i tipi degli argomenti passati a .then():
var arg1 = console.log();var arg2 = console.log;var arg3 = value => console.log(value);
typeof arg1 === "undefined";typeof arg2 === "function";typeof arg3 === "function";Ancora curioso di sapere come funziona la quarta opzione?
Funziona effettivamente così:
// Opzione #4 - in praticaPromise.resolve(42) .then(undefined) // non ha alcun effetto sul valore, verrà passato al `.then(fn)` successivo .then(console.log);