Abbiamo appena imparato a conoscere Callback Hell e
come le promesse possono permetterci di superare questo problema.
Sappiamo che il driver MongoDB nodo supporta nativamente le promesse.
Quindi, se non si specifica una richiamata,
le chiamate alle loro funzioni restituiranno promesse.
Quindi, stiamo andando ad aggiornare la nostra applicazione per fare uso di promesse per
evitare il problema inferno di callback che abbiamo appena imparato nella lezione precedente.
Tornando alla nostra applicazione,
ancora una volta dando un'occhiata al motivo per cui l'inferno di callback si è sviluppato nel nostro codice.
Si noti che qui quando abbiamo implementato le operazioni,
abbiamo un'operazione e poi all'interno del callback di tale operazione,
quindi abbiamo bisogno di avviare l'operazione successiva e all'interno
del callback di tale operazione stiamo iniziando l'operazione successiva e così via.
Quindi stai finendo con questa struttura piramidale qui.
Un' operazione all'interno del callback di un'altra e all'interno del callback.
Ora, questo codice diventerà presto ingombrante e complicato da capire.
Ecco perché vogliamo trasformare questo codice utilizzando
il supporto promessa che Mongo DB Driver già fornisce
per noi in modo che possiamo invece utilizzare le promesse
piuttosto che utilizzare le funzioni di callback come abbiamo fatto in questo esercizio.
Naturalmente, ho fatto la versione precedente solo per illustrarvi come possiamo
atterrare con callback hell e come possiamo usare le promesse per superare questo problema.
Quindi, prima di aggiornare il file index.js,
lasciami andare nel file operations.jsfile e quindi aggiorneremo prima questo.
Quindi qui, noterai che quando chiamiamo questa funzione qui,
stiamo passando il secondo parametro che è una funzione di callback qui.
Quindi, perché useremo le promesse qui.
Quindi ho intenzione di eliminare quella funzione di callback e quindi
dal momento che questa chiamata all'inserto restituirà comunque le promesse,
restituirò solo la promessa da questa funzione.
Quindi nota come il codice è stato semplificato.
Allo stesso modo per il secondo,
rimuoverò semplicemente questa funzione di callback e
quindi restituirò la promessa che
viene restituita da questo e quindi gestirla nel codice in index.js.
Allo stesso modo per quello di eliminare anche,
rimuoverò il callback e poi restituirò quel crash e anche per uptade.
Per l'aggiornamento, rimuoveremo il callback che abbiamo dato
qui e quindi restituiremo la promessa.
Quindi in questo modo tutte queste quattro funzioni
restituiranno la promessa che è già restituita
da queste chiamate alle funzioni del driver MongoDB.
Ora una volta che abbiamo completato questo,
torniamo a index.js.
In index.js, ho intenzione di aggiornare di nuovo questa funzione qui.
Quindi l'uso delle promesse dirà MongoClient.connect (url) e quindi
lo sostituiremo dicendo «then» e questo riceve solo il db come parametro.
E qui dentro, gestiremo il resto e anche possiamo
fare notare che questa particolare funzione chiude il «Poi» qui e la promessa,
la seconda parte della promessa,
possiamo gestire l'errore.
Possiamo dire consolelog.
Quindi possiamo usare la cattura della promessa anche per catturare gli errori.
In questo modo, abbiamo colto gli errori.
Ora, miglioriamo il codice qui dentro.
Quindi dentro qui stiamo facendo il documento di inserimento dell'operazione DB,
e invece di chiamare questa funzione qui,
quello che ho intenzione di fare è trasformarlo in «allora» qui.
Quindi ho intenzione di chiudere questo e dire.then risultato.
Quindi all'interno di questi risultati,
stiamo andando a stampare il registro della console e poi.
Quindi ho intenzione di chiudere questo fuori qui e poi
chiuderemo il «allora» qui e poi
questo sarà collegato a un «allora» qui.
Quindi vedi che sto incatenando due «allora»
uno nell'altro qui e poi dentro di noi poi,
faremo un registro della console e poi faremo un ritorno della prossima operazione.
Ma poi, per questa operazione,
ho intenzione di chiudere questo e chiudere questo
poi e poi questa chiamata di nuovo ora
verrà gestita all'interno di una funzione «allora» qui.
Quindi nota come hai la prima funzione e nel «then» stiamo chiamando
i documenti dboper find e che torneranno e questo restituirà una promessa.
Quella promessa sarà gestita da questo allora.
Quindi stiamo concatenando due allora insieme e poi di nuovo concatenando un altro «allora» qui.
Permettetemi di reinventare il codice qui e poi restituiremo
questo qui e questo di nuovo chiuderà e chiuderà quel «
allora» e poi questo viene racchiuso all'interno del prossimo «allora» e
chiameremo la prossima funzione qui «quel
db.DropCollection ('Piatti' e chiuderà «questo allora» e il prossimo qui.
Ci occuperemo del «allora» del risultato qui.
Restituisci dbclose e tutti
questi qui possono essere ora rimossi perché non sono più necessari.
E poi finalmente se c'è un errore catturerà l'errore questa funzione.
Quindi ho intenzione di copiare questo e poi incollarlo qui. Questo è tutto.
Con questa modifica ora,
il tuo codice è molto più facile da gestire qui.
Quindi, come puoi vedere,
hai il mongoClient.connect che
restituisce una promessa e all'interno della gestione di quella promessa,
stanno chiamando questi metodi e uno dopo l'
altro stanno restituendo la promessa e poi li stai concatenando usando il.
Questa struttura degli accordi è molto più facile da seguire rispetto a quanto avevamo implementato in precedenza.
Quindi usando le promesse abbiamo letteralmente girato e quindi evitato
l'inferno di callback che abbiamo visto nella versione precedente di questa applicazione.
Quindi salviamo le modifiche sia a
index.jsn.operation.js e quindi diamo un'occhiata a questa applicazione.
Ancora una volta andando al terminale,
al prompt digitare «npm
start» e vedrai che la tua applicazione viene eseguita esattamente come prima,
inserisce il documento, trova il documento,
aggiorna il documento e quindi trova
il documento aggiornato e quindi chiude il database dell'atto.
Quindi usando le promesse abbiamo ristrutturato il codice per essere molto più facile ed
evitato l'inferno di callback che abbiamo visto nella versione precedente di questa applicazione.
Con questo, completiamo questo esercizio.
In questo esercizio, avete visto come possiamo fare uso
di promesse per evitare l'inferno di callback.
Questo è un buon momento per fare un commit git con
il messaggio callback hell and promise.