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

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

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

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

Node.js

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Q&A

解決済

2回答

187閲覧

関数の外にreturnしたものを使いたいのですが、実行の順番がうまくいっておりません。。。

ochiba2525

総合スコア16

MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

Node.js

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

0グッド

0クリップ

投稿2018/03/18 05:45

編集2018/03/18 06:12

userIdをreturnして、関数の外でも使いたいのですが、
実行の順番がうまくいっておりません。

調べる限り、mongodbのクエリーの下記方がネスト構造になり、
asynk/awaitの非同期処理でもうまくいきませんでした。

初歩的な質問であれば、申し訳ないです。

よろしくお願いいたします。

const userInsert = () => { MongoClient.connect(url, (err, db) => { var userId; db.collection("users", (error, collection) => { collection.insert([ { name: "userName", phone: 09012345678, mail: "test@mail", address: "testAddress", status:null } ], (error, result) => { userId = result.insertedIds; console.log("userId = " + userId); db.close(); console.log("user_insert ok"); return userId; }); }); }); } var usr = userInsert(); console.log("usr = " + usr); console.log(1);

実行結果
usr = undefined
1
userId = 5aadfa186ecbff3d0454399c
user_insert ok

望んでいる結果
userId = 5aadfa186ecbff3d0454399c
user_insert ok
usr = 5aadfa186ecbff3d0454399c
1

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

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

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

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

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

kei344

2018/03/18 06:05

質問文のコードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
ochiba2525

2018/03/18 06:12

ご指摘ありがとうございます。ただいま修正致しました。
guest

回答2

0

ベストアンサー

コールバックパターンを使っているなら、関数の中でリターンしてもその結果を関数外で取れませんよー。
MongoClientはpromise使えるので、async/await使いたいならそっち使いましょ。

投稿2018/03/18 06:22

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ochiba2525

2018/03/18 06:45

ありがとうございます。 promiseでやってみます^^ 一番に解答いただけたので、ベストアンサーに選ばせていただきます。
guest

0

非同期で実行されるため、少なくともその書き方は出来ません。
続けて何かをしたいのであれば return userId; のところで関数を呼び出すなりする必要があります。

あとはPromiseで待つくらいでしょうか。

【Promiseの事始め - Qiita】
https://qiita.com/taka4sato/items/658d32224c0b6e579961#mongodbでの事例

投稿2018/03/18 06:27

kei344

総合スコア69364

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

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

ochiba2525

2018/03/18 06:46

リンクまで丁寧にありがとうございます。Promiseで書いてみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問