色々試してみたのですが、アロー関数での
戻り値の使い方がいまいち分かっていません。
下のようなコードにしてみても返って来るのは
undefinedです
js
1login(){ 2 console.log("login") ; 3 MongoClient.connect(url,{ useNewUrlParser: true }, (err, db) =>{ 4 5 if (err) throw err ; 6 let myobj = {name : this.name, password : this.password } ; 7 let dbo = db.db("mydb"); 8 dbo.collection("students").findOne(myobj,(err,result)=>{ 9 if(result==null){ 10 console.log("あなたは登録されていません"); 11return false ; 12 }else{ 13 console.log("name:" + this.name + ",password:" + this.password + "は既に登録しています") ; 14return true 15 } 16 db.close() ; 17 }); 18 }); 19 } 20 21 22console.log(login());
違う方法として
flagを使ってみたのですが
以下の方法だと常にfalseが返ってきてしまいます。
js
1login(){ 2 console.log("login") ; 3falg = false ; 4 MongoClient.connect(url,{ useNewUrlParser: true }, (err, db) =>{ 5 6 if (err) throw err ; 7 let myobj = {name : this.name, password : this.password } ; 8 let dbo = db.db("mydb"); 9 dbo.collection("students").findOne(myobj,(err,result)=>{ 10 if(result==null){ 11 console.log("あなたは登録されていません"); 12flag = false ; 13 }else{ 14 console.log("name:" + this.name + ",password:" + this.password + "は既に登録しています") ; 15flag = true ; 16 } 17 db.close() ; 18 }); 19 }); 20return flag ; 21 } 22 23 24console.log(login());
アロー関数内のみでしかflagが扱えていない等の理由
だと思うのですが、どう頑張っても
ture,falseの場合分けが出来ません。
consol.log("あなたは登録されています")などのifの場合分けは
問題なく分岐出来てます。
どなたかよろしくお願いいたします
追記
ご回答していただいた通り、
promiseを使って書き直して見たのですが、
async()関数無いでないとawaitFunc()が使えないのでしょうか??
自分はこのawaitFuncを別のページでif文の分岐で使いたいです
js
1login(){ 2 console.log("login") ; 3 4 MongoClient.connect(url,{ useNewUrlParser: true }, (err, db) =>{ 5 if (err) throw err ; 6 let myobj = {name : this.name, password : this.password } ; 7 let dbo = db.db("mydb"); 8 9 10 dbo.collection("students").findOne(myobj,(err,result)=>{ 11 const func = async () => { 12 let flag = false ; 13 if(result==null){ 14 console.log("あなたは登録されていません") 15 return = false ; 16 }else{ 17 console.log("name:" + this.name + ",password:" + this.password + "は既に登録しています") ; 18 return = true ; 19 } 20 db.close() ; 21 22 const awaitFunc = async () => { 23 console.log(await func()); 24 }; 25 awaitFunc(); 26 }); 27 }); 28}
というように書き直したのですが、
自分のやりたいことは下のような事です。
要は、login()関数を呼び出したらtrue or falseが返って来るようにしたいのです
processでは不可能なのでしょうか!?
js
1login(){ 2 console.log("login") ; 3 4 MongoClient.connect(url,{ useNewUrlParser: true }, (err, db) =>{ 5 if (err) throw err ; 6 let myobj = {name : this.name, password : this.password } ; 7 let dbo = db.db("mydb"); 8 9 10 dbo.collection("students").findOne(myobj,(err,result)=>{ 11 const func = async () => { 12 let flag = false ; 13 if(result==null){ 14 console.log("あなたは登録されていません") 15 return = false ; 16 }else{ 17 console.log("name:" + this.name + ",password:" + this.password + "は既に登録しています") ; 18 return = true ; 19 } 20 db.close() ; 21 22 const awaitFunc = async () => { 23 await func() 24 }; 25 26 }); 27 }); 28let a =awaitFunc(); 29return a ; 30}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/24 12:37
2018/11/28 09:00
2018/11/29 10:31