mirror of
https://github.com/alrayyes/wiki.git
synced 2024-11-25 13:06:22 +00:00
48 lines
795 B
Markdown
48 lines
795 B
Markdown
|
---
|
||
|
id: 3dac2b04-4015-4c1f-847c-5e677aec1fc0
|
||
|
title: JavaScript For Await Of
|
||
|
---
|
||
|
|
||
|
# Syntax
|
||
|
|
||
|
``` javascript
|
||
|
async function f() {
|
||
|
for await (const x of createAsyncIterable(["a", "b"])) {
|
||
|
console.log(x);
|
||
|
}
|
||
|
}
|
||
|
// Output:
|
||
|
// a
|
||
|
// b
|
||
|
```
|
||
|
|
||
|
# Rejections
|
||
|
|
||
|
Like `await` in [async
|
||
|
functions](20201026103714-javascript_async_functions), th eloop throws
|
||
|
an exception if `next()` returns a rejection:
|
||
|
|
||
|
``` javascript
|
||
|
function createRejectingIterable() {
|
||
|
return {
|
||
|
[Symbol.asyncIterator]() {
|
||
|
return this;
|
||
|
},
|
||
|
next() {
|
||
|
return Promise.reject(new Error("Problem!"));
|
||
|
},
|
||
|
};
|
||
|
}
|
||
|
(async function () {
|
||
|
// (A)
|
||
|
try {
|
||
|
for await (const x of createRejectingIterable()) {
|
||
|
console.log(x);
|
||
|
}
|
||
|
} catch (e) {
|
||
|
console.error(e);
|
||
|
// Error: Problem!
|
||
|
}
|
||
|
})(); // (B)
|
||
|
```
|