質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

解決済

2回答

4690閲覧

node.jsのdone文について

_Ghostrick_

総合スコア12

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

0クリップ

投稿2015/11/06 23:42

node.jsのコードを見るとよくdone(null,obj); など、done()が出てきますが検索したりしても公式ドキュメントなど、詳しい説明が全く出てきません。

このdone()を分かりやすく説明してくださる方はいませんでしょうか……??

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

具体的なコード例がないとなんとも言えませんが、二つの可能性があるかと思います。

  1. 一部のライブラリにあるPromise.prototype.done

一部のライブラリで実装されたPromiseにはdoneがあるそうです。
Promise.prototype.done とは何か?
ただ、これは正式なECMAScript 2015には含まれていませんので、そのうち無くなるかも知れません。

  1. 関数の仮引数

callbackを複数受け取るような関数ですと、下記のように実装することもあるようです。

JavaScript

1var kurikaeshi = function(count, callback, done) { 2 for (var i = 0; i < count; i++) callback(i); 3 done(count); 4}

繰り返した後にdoneを最後に呼ぶ、といった実装のために、doneという仮引数でcallbackの関数を受け取る事があるようです。

他にもあるかもしれませんが、よく見かけたというコードを示してもらえるとわかるかと思います。

投稿2015/11/07 00:13

raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

「コールバック関数」で検索してみてください。

fs. readFileを例に取りますと、fs.readFile(file[, options], callback)とあり、callbackにはerror, dataが渡されることが定義されています。

js

1var fs= require('fs') 2fs.readFile('./whatever.txt',function(error,data){ 3 // ファイルが存在しないときなど、errorに失敗原因が渡る 4 if(error){ 5 // 事後処理が必要な場合 6 // do staff... 7 8 // プロセスの異常終了 9 console.trace(error.message) 10 process.exit(1) 11 } 12 13 // 正常終了 14 console.log(data.toString()) 15 process.exit(0) 16})

この、callbackの第一引数に例外、第二引数に結果、というパターンは外部のライブラリであっても頻出します。慣習でしょうね。

自分でこのような関数を実装するさい、上記のようにcallback関数を引数の最後に受け取るパターンが作法となっています。これは、実装した関数を、他の利用者がプロセスを強制終了させるか、処理を継続させるかを選択させるためです。通常の例外であればtry...catch文を使用して、後続の処理を継続させることができますが、非同期処理でtry...catch文はうまく動作しません。

参考

error handling - try-catch in javascript... isn't it a good practice? - Programmers Stack Exchange

投稿2015/11/07 05:56

編集2015/11/07 06:06
horse_n_deer

総合スコア452

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問