‫Istruttore: Cominciamo ora a
‫imparare come risolvere l'inferno delle richiamate usando le promesse.
‫E inizieremo usando una promessa per
‫la richiesta di
‫apparizione dell'agente invece della richiamata.
‫E funzionerà perché la libreria dei super agenti ha
‫effettivamente il supporto per le promesse pronte all'uso,
‫quindi possiamo semplicemente usarle qui.
‫Per le funzioni del nodo, provenienti da pacchetti di nodi interni
‫come Leggi file, dovremo effettivamente costruire noi stessi la
‫promessa e lo faremo più avanti nella prossima lezione, o giù
‫di lì.
‫Ma per
‫ora, voglio che impari come consumare le promesse
‫e solo in seguito come costruirle.
‫Ok, ricominciamo con la libreria
‫dei super agenti
‫e più specificamente con il metodo get qui.
‫Perché questo metodo qui restituisce effettivamente una promessa.
‫Quindi, senza entrare troppo nei dettagli, per ora, una
‫promessa implementa sostanzialmente
‫il concetto di valore futuro.
‫Quindi, in pratica, un valore che ci aspettiamo di ricevere
‫in futuro, quindi è un po'
‫come se dicessimo "Ehi, server" o "Ehi, API, per
‫favore procurami un'immagine casuale di un cane" in background e lascia
‫che fammi sapere quando sei pronto "e poi
‫restituiscimi quei dati. " Va
‫bene?
‫Quindi quell'immagine casuale è il valore
‫che ci aspettiamo in futuro.
‫E questo è esattamente il tipo di richiesta
‫che stiamo facendo utilizzando una libreria di super agenti
‫in questo esempio.
‫Destra.
‫E il metodo get che usiamo di nuovo
‫restituirà automaticamente e immediatamente una promessa non appena avvieremo la
‫richiesta.
‫Quindi la promessa non ha ancora
‫un valore, perché il server sta ancora ricevendo
‫i dati dal server in modo asincrono in
‫background, ma la promessa è immediatamente
‫disponibile e sostanzialmente ci promette che riceverà alcuni dati
‫in futuro.
‫Ok, ha senso?
‫E quello stato della promessa in quel caso, così
‫proprio all'inizio, è una promessa in sospeso.
‫Quindi è ancora in sospeso, non
‫è ancora tornato con nessun dato, ok?
‫Quindi qui, a questo punto, abbiamo già una promessa
‫con cui possiamo lavorare.
‫Ora tutto ciò che dobbiamo fare è consumarlo,
‫il che significa sostanzialmente che aspettiamo che torni con
‫i dati.
‫E per farlo, usiamo il metodo then su di esso.
‫Quindi, tutto ciò che facciamo è usare then e
‫poi qui, passiamo una funzione di callback.
‫Questa funzione di callback verrà quindi chiamata non appena
‫la promessa avrà finito di fare il suo lavoro e sarà tornata
‫con i dati.
‫E quei dati sono quindi disponibili come argomento
‫per quel callback.
‫Ora mi piace chiamarlo il risultato.
‫E così, di nuovo in quella funzione di callback
‫che abbiamo qui, abbiamo quei dati disponibili.
‫Quindi prendiamo tutto questo qui e mettiamolo in
‫questa funzione di callback e poi
‫liberiamoci di questo.
‫Quindi non ne abbiamo più
‫bisogno e salvatelo.
‫Ora potresti pensare, beh, stiamo ancora usando
‫i callback qui, e sì, in realtà è vero.
‫Quindi questo non sembra un grande cambiamento per
‫ora, ma dopo aver trasformato l'intero esempio
‫qui in promesse,
‫vedrai il grande impatto che le promesse avranno sul nostro codice.
‫Quindi questo è fondamentalmente se abbiamo più promesse, saremo
‫in grado di concatenare queste callback l'una sull'altra
‫invece di annidarle.
‫Che è già un enorme miglioramento.
‫Una cosa che ho dimenticato di menzionare
‫prima è che una promessa non appena ritorna con i
‫dati viene chiamata promessa risolta.
‫Quindi all'inizio è una promessa in sospeso
‫e quando ottiene con successo
‫i dati, è quindi una promessa risolta.
‫Tuttavia, una promessa risolta potrebbe non avere sempre
‫successo perché potrebbe essersi verificato un errore.
‫Quindi diciamo che una promessa risolta può essere
‫soddisfatta o rifiutata.
‫La promessa mantenuta ha in realtà un risultato che
‫vogliamo usare.
‫Mentre una promessa rifiutata è quando si è verificato un errore.
‫Quindi ricorda la situazione che abbiamo
‫avuto prima in cui avevamo una razza di cane sbagliata.
‫Quindi, in quel caso, abbiamo
‫avuto un errore e l'abbiamo gestito utilizzando questo pezzo di codice qui.
‫Va bene.
‫Ora la cosa con questo metodo then
‫qui è che in realtà gestisce solo le promesse mantenute ma
‫non fa nulla se c'è stato un errore,
‫perché per quello, in realtà abbiamo un altro metodo.
‫Quindi un altro meccanismo per gestirlo.
‫E questo è il metodo di cattura.
‫Quindi, subito dopo il metodo
‫then, possiamo concatenare un altro metodo chiamato catch.
‫Va bene.
‫E così questo verrà chiamato se c'è stato un errore.
‫Quindi qui, abbiamo effettivamente accesso a quell'oggetto errore.
‫E quindi ora andiamo avanti, prendiamo
‫questo pezzo di codice e
‫lo
‫mettiamo qui, e ora possiamo sbarazzarci di questo.
‫Perché in realtà in questo metodo
‫then, non abbiamo informazioni se c'è
‫stato un errore o meno perché viene chiamato solo
‫nel caso in cui la promessa abbia avuto successo.
‫Quindi, se è una promessa mantenuta.
‫Ok, quindi è carino separare questi due
‫casi automaticamente per noi.
‫Quindi, invece di avere quella strana gestione
‫che avevamo
‫prima, possiamo semplicemente scrivere tutta la logica per il caso di
‫successo che è il
‫più comune perché di solito ci aspettiamo che
‫tutto funzioni bene, ma nel caso ci fosse
‫un errore, possiamo inserire qualche altra logica quaggiù in questo gestore di errori qui.
‫Quindi lo teniamo ben separato.
‫Cambiamolo di nuovo qui.
‫Dare questo un altro salvataggio per eseguirlo di nuovo.
‫E quindi qui abbiamo Not Found, e
‫quindi vedete che in realtà è entrato in questo metodo catch qui
‫e non ha fatto nessuna
‫delle cose che sono in questo metodo then.
‫Ora vai avanti e risolvi questo qui,
‫chiudilo,
‫salva questo e
‫ci siamo.
‫Quindi è così che consumiamo le promesse.
‫Quindi abbiamo iniziato con questo metodo qui che
‫ha restituito una promessa e così
‫via, possiamo concatenare il
‫metodo then che gestisce fondamentalmente il caso
‫di successo, e poi alla fine, concateniamo anche
‫il metodo catch che gestisce l'esito negativo, quindi il rifiuto, promettere.
‫Ma come ho detto prima, questo sembra ancora
‫come prima.
‫Destra?
‫Quindi abbiamo ancora questa funzione di callback qui,
‫quindi tutta questa funzione di callback
‫e anche qui all'interno del nostro metodo then, abbiamo questa funzione
‫di callback di writeFile.
‫Quindi andiamo avanti e risolviamo il problema nel prossimo video.