Repository navigation
Expand file tree
/
Copy pathindex.md
More file actions
92 lines (68 loc) · 3.76 KB
/
Copy pathindex.md
File metadata and controls
92 lines (68 loc) · 3.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
---
title: "AsyncDisposableStack : méthode disposeAsync()"
short-title: disposeAsync()
slug: Web/JavaScript/Reference/Global_Objects/AsyncDisposableStack/disposeAsync
l10n:
sourceCommit: 7a5b580a28a0b1a33e42e9fb81c8234994ec0e36
---
La méthode **`disposeAsync()`** des instances de {{JSxRef("AsyncDisposableStack")}} libère la pile en appelant tous les libérateurs enregistrés, dans l'ordre inverse de leur enregistrement, en attendant la fin de chacun avant d'appeler le suivant. Si la pile est déjà libérée, cette méthode ne fait rien.
Elle effectue la même action que `await using gestionnaire = new AsyncDisposableStack()` à la sortie de portée. Elle peut être utilisée si vous souhaitez effectuer le nettoyage à un autre moment que la sortie de portée.
## Syntaxe
```js-nolint
disposeAsync()
```
### Paramètres
Aucun.
### Valeur de retour
Une nouvelle promesse ({{JSxRef("Promise")}}) qui se résout avec `undefined` lorsque tous les libérateurs enregistrés ont terminé leur exécution en séquence.
### Exceptions
`disposeAsync()` ne lève jamais d'erreur de façon synchrone. La promesse retournée peut être rejetée avec l'une des erreurs suivantes :
- {{JSxRef("SuppressedError")}}
- : Levée si plusieurs libérateurs dans la pile ont levé une erreur. Si une seule erreur est levée, elle est relancée telle quelle. Sinon, pour chaque erreur supplémentaire, une nouvelle {{JSxRef("SuppressedError")}} est créée, avec l'erreur initiale dans la propriété `suppressed` et la nouvelle erreur dans la propriété `error`.
## Exemples
### Libérer une pile
Ici, on ajoute trois libérateurs à la pile, en utilisant les méthodes {{JSxRef("AsyncDisposableStack/use", "use()")}}, {{JSxRef("AsyncDisposableStack/adopt", "adopt()")}} et {{JSxRef("AsyncDisposableStack/defer", "defer()")}}. Lorsque `disposeAsync()` est appelée, les libérateurs sont appelés dans l'ordre inverse de leur enregistrement.
Notez qu'en général, il n'est pas nécessaire d'appeler `disposeAsync()` manuellement. Déclarez la pile avec {{JSxRef("Statements/await_using", "await using")}} et sa méthode [`[Symbol.asyncDispose]()`](/fr/docs/Web/JavaScript/Reference/Global_Objects/AsyncDisposableStack/Symbol.asyncDispose) sera automatiquement appelée lorsque la pile sortira de la portée.
```js
class Ressource {
#liberation() {
// Imaginez ici une logique de libération plus significative
return new Promise((resolve) => {
setTimeout(resolve, 1000);
});
}
async liberer() {
await this.#liberation();
console.log("Ressource libérée");
}
async [Symbol.asyncDispose]() {
await this.#liberation();
console.log("Ressource libérée via Symbol.asyncDispose");
}
}
async function faireQuelqueChose() {
const gestionnaire = new AsyncDisposableStack();
const ressource = gestionnaire.use(new Ressource());
const ressource2 = gestionnaire.adopt(new Ressource(), (ressource) =>
ressource.liberer(),
);
gestionnaire.defer(() => console.log("Libérateur différé"));
gestionnaire.disposeAsync();
// Affiche dans l'ordre :
// Libérateur différé
// Ressource libérée
// Ressource libérée via Symbol.dispose
}
faireQuelqueChose();
```
## Spécifications
{{Specifications}}
## Compatibilité des navigateurs
{{Compat}}
## Voir aussi
- [Gestion des ressources en JavaScript](/fr/docs/Web/JavaScript/Guide/Resource_management)
- L'objet natif {{JSxRef("AsyncDisposableStack")}}
- La méthode {{JSxRef("AsyncDisposableStack.prototype.adopt()")}}
- La méthode {{JSxRef("AsyncDisposableStack.prototype.defer()")}}
- La méthode {{JSxRef("AsyncDisposableStack.prototype.use()")}}
- La méthode [`AsyncDisposableStack.prototype[Symbol.asyncDispose]()`](/fr/docs/Web/JavaScript/Reference/Global_Objects/AsyncDisposableStack/Symbol.asyncDispose)