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

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

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

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

Q&A

解決済

2回答

6441閲覧

Node.jsでのreturnのやり方

rera

総合スコア109

Node.js

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

0グッド

0クリップ

投稿2017/01/30 14:20

javascript

1// redister new user info 2module.exports.register = (data) => { 3 const connection = getConnection(info); 4 const sql = 'hoge'; 5 6 connection.connect(); 7 const result = connection.query(sql, [ 8 hoge 9 ], (err, result, callback) => { 10 if (err) { 11 12 } 13 } 14 ); 15 connection.end(); 16}; 17 18return "ok";

上記のようなコードがありまして

javascript

1if (err) { 2 3}

ここの部分のエラーの内容をこの関数の呼び出し元に返したいのですが例えば

javascript

1if (err) { 2 return err; 3}

とやっても、最後のreturn "ok";が返ってきてしまいます。
こういった場合はどのような書き方をすれば宜しいのでしょうか。

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

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

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

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

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

guest

回答2

0

ベストアンサー

callbackで非同期に動いているので
スレッド1をa、スレッド2をbとして実行順番を振ってみました。

javascript

1module.exports.register = (data) => { // a-1 2 const connection = getConnection(info); // a-2 3 const sql = 'hoge'; // a-3 4 5 connection.connect(); // a-4 6 const result = connection.query(sql, [hoge], // a-5 7 (err, result, callback) => { // b-1(結果が帰ってきたときに実行される) 8 if (err) { // b-2 9 10 } 11 } 12 ); 13 connection.end(); // a-6 14}; 15 16return "ok"; // a-7??

私は複数のテーブルに順次アクセスしないといけないときにはPromiseを使用して同期化を実装しています。
他にもasyncをする方法もあるみたいです。
これらを使用して同期化させています。

http://azu.github.io/promises-book/
http://caolan.github.io/async/

投稿2017/01/31 00:44

mosapride

総合スコア1480

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

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

退会済みユーザー

退会済みユーザー

2017/01/31 01:09

非同期が原因だと、私の例のやり方では、同じ結果になる可能性大ですね^^;
mosapride

2017/01/31 04:27

callbackを使う処理はたいてい重い処理・寿命が長い処理なので、そのままreturnまでスルっと抜けてしまうことが多いですね。(callbackの処理は別スレッドで生きてた気がしますけど) コールバック地獄、非同期、同期で検索すればたくさん情報がでてきますよ。多すぎて大変ですけど 解決方法が1つじゃないのと、私が紹介したのが過去の遺産で古いものになっている可能性があること、もっとベストな解決方法がある可能性も十分ありますし。 そうやって悩むのが楽しみの一つでもあるのですけどね><
guest

0

if (err) の部分、通ってますか?

err 内容を返すのであれば、やり方はいくつかあると思います。
例えば、msg = 'ok' の初期値を与え、 if(err)msg = err とし return msg とかでもイケるはずです。

投稿2017/01/31 00:28

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問