[解決済み] Node.jsのための非同期関数の書き方
質問
非同期関数は具体的にどのように書けばいいのか調べてみました。多くのドキュメントに目を通した後、私にはまだ不明です。
Nodeのために非同期関数をどのように書けばよいのでしょうか?エラーイベント処理を正しく実装するにはどうしたらよいでしょうか。
私の質問をする別の方法はこうです。次の関数をどのように解釈すべきですか?
var async_function = function(val, callback){
process.nextTick(function(){
callback(val);
});
};
また に関するこの質問は、SO ("How do I create a non-blocking asynchronous function in node.js?") 面白いですね。まだ回答されていないような気がします。
どのように解決するのですか?
非同期IOと非同期関数を混同しているようです。node.jsはノンブロッキングIOの方が良いので、非同期ノンブロッキングIOを使用します。ライアン・ダールのビデオを見ていただくのが一番わかりやすいと思います。
Nodeの非同期関数はどのように書けばいいのでしょうか?
通常の関数を書くだけです。唯一の違いは、すぐに実行されず、コールバックとして渡されることです。
<ブロッククオートエラーイベント処理を正しく実装するにはどうしたらよいでしょうか?
一般的にAPIは、errを第一引数にしたコールバックを与えます。例えば
database.query('something', function(err, result) {
if (err) handle(err);
doSomething(result);
});
はよくあるパターンです。
もう一つのよくあるパターンは
on('error')
. 例えば
process.on('uncaughtException', function (err) {
console.log('Caught exception: ' + err);
});
編集します。
var async_function = function(val, callback){
process.nextTick(function(){
callback(val);
});
};
として呼び出された場合、上記の関数は
async_function(42, function(val) {
console.log(val)
});
console.log(43);
印刷する
42
を非同期でコンソールに出力します。特に
process.nextTick
は、現在のイベントループのコールスタックが空になった後に起動されます。そのコールスタックが空になるのは
async_function
と
console.log(43)
が実行されました。そこで、43の後に42をプリントします。
イベントループについて少し読んでおくといいでしょう。
関連
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] JavaScriptのオブジェクトが空であることをテストするにはどうすればよいですか?
-
[解決済み] Node.jsのプログラムにコマンドライン引数を渡すにはどうしたらいいですか?
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] Node.jsで終了する方法
-
[解決済み】別のウェブページにリダイレクトするにはどうすればいいですか?
-
[解決済み] 文字列がすべて同じ部分文字列で構成されているかどうかを調べるにはどうすればよいですか?
-
[解決済み] コールバック地獄とは何か、RXはそれをどのように、そしてなぜ解決するのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] jqueryでdivの要素がオーバーフローしていないかチェックする
-
[解決済み] なぜJavaScriptでは!{}[true]がtrueに評価されるのですか?
-
[解決済み] Angularjs - 現在の日付を表示する
-
[解決済み] javascript の関数から `undefined` と `null` のどちらを返すのが良いのでしょうか?
-
[解決済み] CORS OriginヘッダーとCSRFトークンによるCSRF保護
-
[解決済み] JSHintの'+'前の改行不良の説明
-
[解決済み] Chromeのwebkitインスペクタで「Unsafe JavaScript attempt to access frame with URL...」というエラーが継続的に発生する。
-
[解決済み] jQueryを使用して、すべてのクリックイベントハンドラを削除するにはどうすればよいですか?
-
[解決済み] なぜjavascriptのES6 Promisesはresolve後も実行を継続するのですか?
-
[解決済み] JavaScript で css プロパティを使用して HTML 要素の背景色を設定する方法