Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?
はじめに 今更ですが、JavaScriptのasync/awaitに関する備忘録になります。 「今まで$.Deferred()やPromiseなどで非同期処理は書いたことがあるが、async/awaitはわからない」 「$.Deferred()やPromiseなどの非同期処理の書き方より、もっと簡潔に書ける書き方があれば知りたい」 「今までの非同期処理の書き方と比べて何が良いのかわからない」 といった人達向けの記事です。 $.Deferred()やPromiseなどで非同期処理を書いたことがある前提のため、非同期処理自体に関する説明は記載しておりません。 記載している利用例のコードはChrome(最新)のコンソール上で動きますので、コンソール上で実行して動作を確認してみると理解が深まりやすいと思います。 本記事で用いている用語 Promiseを返す Promiseオブジェクトを返すこと。
ES2017で仕様に入ったAsyncFunctionとawait単項演算子。 これらを使うと非同期処理を同期的に書くことができ、非同期処理のループもシンプルに書けるようになる。 この記事の内容は全てNode.jsのv8.6.0で動作確認している。 非同期処理の基礎はこちら。 AsyncFunction 関数定義の前にasyncとつけると、その関数はAsyncFunctionになる。 async function myFunc(){ return 'foo'; } console.log(myFunc); // [AsyncFunction: myFunc] console.log(myFunc()); // Promise { 'foo' } myFunc().then(res => console.log(res)); // foo 非同期処理をシンプルに書けていることが分かる。 Asy
現在運用中のプロジェクトのNodeのバージョンを7から8にあげたのでPromiseで書いていた箇所を徐々にasync/awaitに置き換えています。 簡単に書ける一方でPromsieに慣れすぎていたため、「これ並列処理になるんだっけ」とか、「てか、これ動く?」見たいなレベルで手になじまなかったので色々ためして馴染もうと思います。 利用するタイマー関数 function timer(ms, name) { console.log(`name: ${name} start!`) return new Promise((resolve, reject) => { setTimeout(() => resolve(name), ms) }) } Case.1 awaitを書いて非同期処理の関数を並べて書く (async () => { const result1 = await timer(100
Promiseとasync/awaitで複数の非同期処理の結果を待機する方法についてのメモです。 非同期処理をループで複数実行した場合に、 すべての非同期処理の完了を待つのに困ったので調べてみました。 下記のような、非同期処理があった場合、 完了後に処理を行いたい場合はcallbackで行う必要があります。 let doAsyncJob = (data) => { // do async job setTimeout(() => { console.log("wait " + data + " sec."); }, data); }; 完了後にcallbackを実行。 asyncJob.js let doAsyncJobWithCallback = (data, callback) => { // do async job setTimeout(() => { console.log("w
JavaScriptを記述する上で、避けて通れないのが非同期処理。 人類は、長い年月、この非同期的な処理を「如何にして書きやすく、読みやすく記述するか」について探求してきました。 要するに†闇†の塊なのですね。(闇に飲まれよ!!!!) この物語は、そんな†闇†の存在だった非同期処理を、人類がどのように苦しみ、そしてどのように解決していったかを書いていくポエムである。 補足:厳密には、JSはシングルスレッドで動くため、非同期処理は存在しない!と言ってしまえばそこまでなのですが、今回はsetTimeoutやajax通信、onloadイベント登録など、見かけ上、非同期的な挙動を示すものすべてを対象に話していきます。 第一章 ~人類はsetTimeoutを採用しました~ 古代のJavaScriptで、以下のような処理をしたい場合、どうしていただろうか。 「ブラウザ更新直後に『a』を表示し、その2秒
はじめに おばんです、iOSDCの賞品であるtv 4kがちょうど手元に届いた田中です。しっかり開発して遊ぼうと思います。(オススメの4kディスプレイ情報お待ちしています) さて、非同期処理周りのコードを簡潔に書きたいという気持ちから、業界的にPromiseが親しまれて久しい今日この頃。みなさまasync/awaitの方は使っておりますでしょうか。僕はちょうど最近触る機会があったので、今回はasync/awaitを使うと何が良いのか、これまであったPromiseと比較しながら紹介していこうと思います。 ネストが浅くなる 以下のコードを見比べてください。非同期処理ではなく、単純なサンプルですがPromiseの方はPromiseオブジェクトを生成してその中でresolveとrejectを返す必要があるため、一段ネストが深くなっています。async/awaitではそうなっていません。 ネストが浅
モバイルアプリサービス部の五十嵐です。 私のNode.jsの知識は0.x系で止まっているので、今っぽい(と言ってもAWS Lambdaで使いたいのでv4.3.2の)書き方を調べてみました。その中でも一番良く使われるであろうPromiseの使い方をまとめてみます。 サンプルコードは、以前作成したLambda Function(bisque33/slack-slash-commands-with-serverless)をPromiseを使って書き直しました。実際の差分比較はこちらです。 環境 node.js 4.3.2 npm 2.14.12 Promiseとは Promiseは、リンク先の言葉を借りると Promiseオブジェクトは処理の延期(deferred)と非同期処理のために使われます。Promiseはまだ完了していないが、いずれ完了する処理を表します。 とあります。ScalaでいうF
表2. DynamoDBテーブルに保存されるデータのイメージ handlerにベタ書き スケルトンをもとにゴリゴリ実装を進めたコードです。 'use strict'; const AWS = require('aws-sdk'); const client = new AWS.DynamoDB.DocumentClient(); exports.handler = (event, context, callback) => { // validation. if(!('message' in event && event.message !== '')) { callback(JSON.stringify({result: 'ng'}, null)); return; } const todo = { message: event.message }; // fetch current c
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く