Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jsSpPrmInr 162 of 294 menu
◀ ▶

Introduzione alle Promise in JavaScript

Sapete già che l'utilizzo del modello di asincronicità basato su callback porta facilmente alla situazione del callback hell. Pertanto, in JavaScript è stato introdotto un nuovo modello chiamato promise (promise). Studiamo questo modello.

Una promise è un oggetto a cui viene passata come parametro una funzione, all'interno della quale è necessario inserire il nostro codice asincrono:

let promise = new Promise(function() { // codice asincrono });

Come vedete, ho memorizzato l'oggetto con la promise in una variabile promise. In un altro punto del codice posso applicare a questa variabile il metodo then, passandogli una funzione con il codice che deve essere eseguito al completamento del codice asincrono, scritto alla creazione di questa promise:

promise.then(function() { // verrà eseguito al completamento del codice asincrono });

Sembra complicato, quindi diamo un'occhiata a un esempio. Supponiamo che io abbia questo codice asincrono:

setTimeout(function() { let result = [1, 2, 3, 4, 5]; }, 3000);

Supponiamo che voglia risolvere per esso il nostro compito principale dell'asincronicità: eseguire del codice dopo lo scadere del timer. Inoltre, non voglio inserire questo codice all'interno del timer stesso e voglio che in questo codice arrivi in qualche modo il risultato, scritto da me nella variabile result. In effetti, abbiamo risolto questo compito nelle lezioni precedenti tramite callback e sottoscrizioni. Vediamo ora come farlo con le promise.

Per cominciare, dobbiamo avvolgere il nostro codice asincrono in una promise:

let promise = new Promise(function() { setTimeout(function() { let result = [1, 2, 3, 4, 5]; }, 3000); });

Questo, tuttavia, non è sufficiente. Dobbiamo indicare esplicitamente che il nostro codice asincrono è terminato. In questo ci aiuta una speciale funzione di completamento, che viene automaticamente passata nel primo parametro della funzione, se specificato:

let promise = new Promise(function(resolve) { // specifichiamo il parametro setTimeout(function() { let result = [1, 2, 3, 4, 5]; }, 3000); });

Utilizzando la funzione di completamento possiamo esplicitamente indicare alla promise che il codice asincrono è terminato. Per fare questo, dobbiamo chiamare questa funzione nel punto che desideriamo:

let promise = new Promise(function(resolve) { setTimeout(function() { let result = [1, 2, 3, 4, 5]; resolve(); // completiamo la promise }, 3000); });

Inoltre, se vogliamo passare all'esterno qualche risultato del codice asincrono, possiamo passarlo come parametro alla nostra funzione di completamento:

let promise = new Promise(function(resolve) { setTimeout(function() { let result = [1, 2, 3, 4, 5]; resolve(result); // passiamo il risultato }, 3000); });

Possiamo, naturalmente, eliminare la variabile intermedia:

let promise = new Promise(function(resolve) { setTimeout(function() { resolve([1, 2, 3, 4, 5]); }, 3000); });

Ora in qualsiasi altro punto possiamo chiamare il metodo then della nostra promise:

promise.then(function() { // si attiverà al completamento della promise });

Il risultato dell'operazione della promise arriverà nel primo parametro della funzione, se desideriamo specificarlo:

promise.then(function(result) { console.log(result); // visualizzerà l'array con il risultato });

Create una promise, all'interno della quale ci sarà un ritardo di 5 secondi, dopo la quale la promise deve completarsi, restituendo come suo risultato un testo a piacere. Visualizzate questo testo sullo schermo.

← →
↑
Italiano▼
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesia日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Utilizziamo i cookie per il funzionamento del sito, l'analisi e la personalizzazione. I dati vengono elaborati in conformità con la Politica sulla privacy.
accetta tutto personalizza rifiuta