Baseline Widely available
Le constructeur Promise()
est principalement utilisé afin d'envelopper des fonctions qui ne prennent pas en charge les promesses.
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("foo");
}, 300);
});
promise1.then((value) => {
console.log(value);
// Expected output: "foo"
});
console.log(promise1);
// Expected output: [object Promise]
Syntaxe Paramètres
executeur
Une fonction à exécuter par le constructeur lors de la construction du nouvel objet Promise
. executeur
contient du code spécifique qui relie le résultat d'une opération à une promesse. C'est le programme qui doit fournir ce code. Sa signature doit être :
function(fonctionResolution, fonctionRejet){
// généralement une opération asynchrone
}
fonctionResolution
et fonctionRejet
sont également des fonctions, qu'on peut nommer librement. Ces deux fonctions prennent un seul paramètre, qui peut être de n'importe quel type.
fonctionResolution(valeur) // appelée lors de la résolution
fonctionRejet(raison) // appelée lors du rejet
Le paramètre valeur
de fonctionResolution
peut être une autre promesse, auquel cas la promesse est insérée dynamiquement dans la chaîne de promesses.
Quant à executeur
, il est important de comprendre :
executeur
est ignorée.executeur
, la promesse est rejetée.Ainsi, voici le mécanisme par lequel executeur
produit un effet :
Promise
, il génère également une paire de fonctions correspondantes fonctionResolution
et fonctionRejet
qui sont « reliées » à l'objet Promise
.executeur
peut réaliser une opération et refléter le résultat de l'opération (si la valeur n'est pas un autre objet Promise
) en object) comme étant « résolue » ou « rejetée » en appelant respectivement fonctionResolution
ou fonctionRejet
.executeur
communique par l'effet de bord fourni avec fonctionResolution
ou fonctionRejet
. De cette façon, la promesse devient « résolue » ou « rejetée ».Pour résumer, voici les étapes généralement suivies :
executeur
est asynchrone et fournit une fonction de rappel (callback).executeur
.fonctionResolution
.fonctionResolution
se fait avec un paramètre valeur
.valeur
est passée en retour à l'objet Promise
.Promise
appelle, de façon asynchrone, toute fonction passée via .then(gestionSucces)
..then(gestionSucces)
est passée comme paramètre d'entrée à gestionSucces
qui est appelée (voir l'enchaînement des promesses).Lorsqu'il est appelé avec l'opérateur new
, le constructeur Promise()
renvoie un objet Promise
. Cette promesse sera résolue lorsque l'une des fonctions fonctionResolution
ou fonctionRejet
sera appelée. Si on passe une promesse comme argument à fonctionResolution
ou fonctionRejet
, on pourra dire que la promesse courante est résolue, mais pas que la chaîne de promesses est terminée.
On crée un objet Promise
en utilisant le constructeur avec l'opérateur new
. Ce constructeur prend une fonction en argument, et cette fonction prend à son tour deux fonctions en paramètres. La première de ces deux fonctions est appelée lorsque la tâche asynchrone se termine correctement, c'est alors le résultat de l'opération qui est passé comme paramètre. La seconde fonction est appelée lorsque la tâche échoue et c'est alors la raison de l'échec (généralement un objet d'erreur) qui est passée en argument.
const maPremierePromesse = new Promise((resolution, rejet) => {
// réaliser une opération asynchrone qui appellera :
//
// resolution(uneValeur) // réussite
// ou
// rejet("raison d'échec") // échec
});
Renvoyer une promesse depuis une fonction
Pour qu'une fonction ait les fonctionnalités d'une promesse, on lui fera renvoyer une promesse :
function maFonctionAsync(url) {
return new Promise((resolution, rejet) => {
const xhr = new XMLHttpRequest();
xhr.open("GET", url);
xhr.onload = () => resolution(xhr.responseText);
xhr.onerror = () => rejet(xhr.statusText);
xhr.send();
});
}
Spécifications Compatibilité des navigateurs Voir aussi
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4