You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/11-async/06-promisify/article.md
+24-24Lines changed: 24 additions & 24 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,10 +1,10 @@
1
1
# Promisification
2
2
3
-
Promisification -- is a long word for a simple transform. It's conversion of a function that accepts a callback into a function returning a promise.
3
+
La promisification represente une simple transformation. Il s'agit de la conversion d'une fonction qui accepte une fonction de rappel ("callback") en une fonction renvoyant une promesse.
4
4
5
-
Such transforms are often needed in real-life, as many functions and libraries are callback-based. But promises are more convenient. So it makes sense to promisify those.
5
+
De telles transformations sont souvent nécessaires dans la vie réelle, car de nombreuses fonctions et bibliothèques sont basées sur des rappels. Mais les promesses sont plus pratiques. Il est donc logique de les transformer.
6
6
7
-
For instance, we have`loadScript(src, callback)`from the chapter<info:callbacks>.
7
+
Par exemple, nous avons`loadScript(src, callback)`du chapitre<info:callbacks>.
8
8
9
9
```js run
10
10
functionloadScript(src, callback) {
@@ -21,7 +21,7 @@ function loadScript(src, callback) {
Let's promisify it. The new `loadScriptPromise(src)`function will do the same, but accept only`src` (no `callback`) and return a promise.
24
+
Transformons-le. La nouvelle fonction `loadScriptPromise(src)`fera de même, mais acceptera seulement`src` (pas de `callback`) et renverra une promesse.
25
25
26
26
```js
27
27
letloadScriptPromise=function(src) {
@@ -37,31 +37,31 @@ let loadScriptPromise = function(src) {
37
37
// loadScriptPromise('path/script.js').then(...)
38
38
```
39
39
40
-
Now`loadScriptPromise`fits well in promise-based code.
40
+
Maintenant,`loadScriptPromise`s'intègre bien dans du code basé sur des promesses.
41
41
42
-
As we can see, it delegates all the work to the original `loadScript`, providing its own callback that translates to promise `resolve/reject`.
42
+
Comme nous pouvons le constater, elle délègue tout le travail au `loadScript` d'origine, en fournissant son propre rappel qui se traduit par la promesse de "résoudre/rejeter".
43
43
44
-
In practice we'll probably need to promisify many functions, it makes sense to use a helper.
44
+
En pratique, nous aurons probablement besoin de promettre de nombreuses fonctions. Il est donc logique d'utiliser une fonction assistante.
45
45
46
-
We'll call it `promisify(f)`: it accepts a to-promisify function `f`and returns a wrapper function.
46
+
Nous l'appellerons `promisify(f)`: elle accepte une fonction à tronsformer `f`et renvoie une fonction wrapper.
47
47
48
-
That wrapper does the same as in the code above: returns a promise and passes the call to the original `f`, tracking the result in a custom callback:
48
+
Ce wrapper fait la même chose que dans le code ci-dessus: renvoie une promesse et passe l'appel au `f` d'origine, en suivant le résultat dans un rappel personnalisé:
49
49
50
50
```js
51
51
functionpromisify(f) {
52
-
returnfunction (...args) { //return a wrapper-function
52
+
returnfunction (...args) { //renvoie une fonction wrapper
53
53
returnnewPromise((resolve, reject) => {
54
-
functioncallback(err, result) { //our custom callback for f
54
+
functioncallback(err, result) { //notre rappel personnalisé pour f
55
55
if (err) {
56
56
returnreject(err);
57
57
} else {
58
58
resolve(result);
59
59
}
60
60
}
61
61
62
-
args.push(callback); //append our custom callback to the end of f arguments
62
+
args.push(callback); //ajoute notre rappel personnalisé à la fin des arguments de f
63
63
64
-
f.call(this, ...args); //call the original function
64
+
f.call(this, ...args); //appeler la fonction d'origine
65
65
});
66
66
};
67
67
};
@@ -71,22 +71,22 @@ let loadScriptPromise = promisify(loadScript);
71
71
loadScriptPromise(...).then(...);
72
72
```
73
73
74
-
Here we assume that the original function expects a callback with two arguments `(err, result)`. That's what we encounter most often. Then our custom callback is in exactly the right format, and`promisify`works great for such a case.
74
+
Nous supposons ici que la fonction d'origine attend un rappel avec deux arguments `(err, result)`. C'est ce que nous rencontrons le plus souvent. Ensuite, notre rappel personnalisé est exactement au bon format et`promisify`convient parfaitement à un tel cas.
75
75
76
-
But what if the original `f`expects a callback with more arguments `callback(err, res1, res2, ...)`?
76
+
Mais que se passe-t-il si le `f`original attend un rappel avec plus d'arguments `callback(err, res1, res2, ...)`?
77
77
78
-
Here's a more advanced version of`promisify`: if called as `promisify(f, true)`, the promise result will be an array of callback results`[res1, res2, ...]`:
78
+
Voici une version plus avancée de`promisify`: si elle est appelée par `promisify(f, true)`, le résultat de la promesse sera un tableau de résultats de rappel`[res1, res2, ...]`:
79
79
80
80
```js
81
-
// promisify(f, true) to get array of results
81
+
// promisify(f, true) pour obtenir un tableau de résultats
//resolve with all callback results if manyArgs is specified
89
+
//résoudre avec tous les résultats de rappel si manyArgs est spécifié
90
90
*!*resolve(manyArgs ? results : results[0]);*/!*
91
91
}
92
92
}
@@ -103,14 +103,14 @@ f = promisify(f, true);
103
103
f(...).then(arrayOfResults=>..., err=>...)
104
104
```
105
105
106
-
For more exotic callback formats, like those without`err` at all: `callback(result)`, we can promisify such functions without using the helper, manually.
106
+
Pour des formats de rappel plus exotiques, comme ceux sans`err`: `callback(résultat)`, nous pouvons transformer de telles fonctions manuellement, sans utiliser la fonction assistante.
107
107
108
-
There are also modules with a bit more flexible promisification functions, e.g. [es6-promisify](https://github.com/digitaldesignlabs/es6-promisify). In Node.js, there's a built-in `util.promisify`function for that.
108
+
Il existe également des modules avec des fonctions de promisification un peu plus flexibles, e.g. [es6-promisify](https://github.com/digitaldesignlabs/es6-promisify). Dans Node.js, il existe une fonction intégrée `util.promisify`pour cela.
109
109
110
110
```smart
111
-
Promisification is a great approach, especially when you use`async/await` (see the next chapter), but not a total replacement for callbacks.
111
+
La promisification est une excellente approche, surtout lorsque vous utilisez`async/wait` (voir le chapitre suivant), mais ne remplace pas totalement les rappels.
112
112
113
-
Remember, a promise may have only one result, but a callback may technically be called many times.
113
+
N'oubliez pas qu'une promesse peut avoir un seul résultat, mais un rappel peut techniquement être appelé plusieurs fois.
114
114
115
-
So promisification is only meant for functions that call the callback once. Further calls will be ignored.
115
+
La promisification ne concerne donc que les fonctions qui appellent le rappel une fois. D'autres appels seront ignorés.
0 commit comments