-
Notifications
You must be signed in to change notification settings - Fork 0
DNET_AsyncAwaitJavaScript
- 戻る
-
JavaScriptのスレッド処理
- Promise (JavaScript)
- async/await (JavaScript)(本ページ)
-
JavaScriptのスレッド処理
- .NETの async/await とは異なる。
- Promiseを、更に進化させた実装。
async 関数 = AsyncFunction
-
関数定義の前にasyncと付けると、
その関数は AsyncFunction オブジェクトになる。 -
AsyncFunctionは、以下のような動作をする。
- await 式を含むことができる。
-
return
-
throw
- また、throwした値は、Promise.reject()に渡して実行するPromiseオブジェクトにラップされて返される。
このため、
- return ステートメント上で await 式を使用しない。
- async 関数の返値は暗黙的に Promise.resolve() でラップされるため。
-
thenのメソッド・チェーンでコールバックを指定する実装になる。
- 便宜上、非同期処理を含まない。
- 以下から実行可能
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise/then
const promise1 = (num) => { return new Promise(resolve => { resolve(num + 1); }); }; const promise2 = (num) => { return new Promise(resolve => { resolve(num + 2); }); }; const promise3 = (num) => { return new Promise(resolve => { resolve(num + 3); }); }; const promise = promise1(0) .then(num => { return promise2(num); }) .then(num => { return promise3(num); }) .then(num => { console.log(num); }) .catch(error => { console.log(error); });
-
結果
「1 + 2 + 3 = 6」の「6」が表示される。
-
await 式によって Promiseの解決を待つため、処理を同期的に書ける。
- 便宜上、非同期処理を含まない。
- 以下から実行可能
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/async_function
const asyncAwait1 = async (num) => { return new Promise(resolve => { resolve(num + 1); }); }; const asyncAwait2 = async (num) => { return new Promise(resolve => { resolve(num + 2); }); }; const asyncAwait3 = async (num) => { return new Promise(resolve => { resolve(num + 3); }); }; const asyncAwait = async () => { var asyncResult1 = await asyncAwait1(0); var asyncResult2 = await asyncAwait2(asyncResult1); var asyncResult3 = await asyncAwait3(asyncResult2); var sum = asyncResult3; console.log(asyncResult3); }; asyncAwait().catch(error => { console.log(error) });
-
結果
「1 + 2 + 3 = 6」の「6」が表示される。
- async/awaitを使った非同期処理の書き方 - 30歳からのプログラミング
http://numb86-tech.hatenablog.com/entry/2017/10/08/192300 - [JavaScript] 僕がasync/awaitを好きなワケ | Developers.IO
https://dev.classmethod.jp/node-js/javascript-why-do-i-like-async-await/ - ES2017の新機能「async / await」でPromise(非同期処理)をスッキリ書く | maesblog
https://mae.chab.in/archives/59793
- async function
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/async_function - await
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/await
-
async/await 入門(JavaScript)
https://qiita.com/soarflat/items/1a9613e023200bbebcb3とはいえasync/awaitもPromiseを利用しているため、Promise自体の理解は必須です。
-
async await の使い方
https://qiita.com/niusounds/items/37c1f9b021b62194e077 -
Promise再入門 > ②
async/await編
https://qiita.com/gctfuji/items/47d310ae795aa9131c14 -
JavaScriptのasync/awaitがPromiseよりもっと良い
https://qiita.com/Anders/items/dfcb48d8b27ceaffb443 -
Promiseの使い方、それに代わるasync/awaitの使い方
https://qiita.com/suin/items/97041d3e0691c12f4974
正誤
- 「便宜所、非同期処理を含まない。」→「便宜上、非同期処理を含まない。」(2 箇所)
移行メモ
- 「戻る」の並びにある「async/await (JavaScript)」は自ページのため、 その旨を補ってプレーン・テキストとした。
- PukiWiki のページ内アンカ(
#xxxxxxxx)は GitHub Wiki では再現できないため、 同一ページ内のアンカは見出しから生成されるアンカに張り替えた。Promise.resolve()/Promise.reject()に張られていた Promise (JavaScript) へのリンクは、 同じ箇条書き内で重複するためプレーン・テキストとした。- マイクロソフト系技術情報 Wiki(techinfoofmicrosofttech.osscons.jp)への URL リンクは、移行済みの async/await に張り替えた。
- 元 Wiki の行頭空白によるプレフォーマット・ブロックは、 フェンス付きコードブロックにした。
Tags: 移行, JavaScript, async/await, Promise, 非同期処理, ES2017, AsyncFunction, await
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。