2017-12-02 3 views
-1

まあ、私はノードjsに新しいです。私は私のコーディング構造について知りたい。あなたのreturn文は役に立たないように見えるノードjsでこのようにコードを実行していますか?

setTimeout(() => { 
    return _db.collection(_encycUsers).findOne(
    // search basis. 
     {"_id" : require("mongodb").ObjectId(_userId)}).then(
     // on a successful search. 
     (_encycUsersData) => { 
     // if return is not empty. 
     if(!(_help.isEmpty(_encycUsersData))) { 
      return _db.collection(_encycUsers).updateOne(
      // search basis. 
      {"_id" : require("mongodb").ObjectId(_encycUsersData["_id"])}, { 
      "$unset" : {"_otp" : _otp, "_state" : ["request.otp.sent", "request.otp.delete"]}, 
      "$set" : {"_state" : "request.otp.reSent"} 
      }).then(
       // on successful encyc update. 
       () => { 
         _debug(_encycUsersData); 
         // search user after successful otp delete. 
         return _db.collection(_encycUsers).findOne(
         // search basis. 
         {"_id": require("mongodb").ObjectId(_encycUsersData["_id"])}).then(
          // on successful user search. 
          (_encycUsersFindData) => { 
          ... 
+2

古典的な "コールバック地獄"。私のヒントは、それを避ける方法を読むことです、https://blog.risingstack.com/node-js-async-best-practices-avoiding-callback-hell-node-js-at-scale/ –

+0

ありがとうリンク。私はすでにこれにうんざりしているので、後悔はありません。 :) –

+0

リンクありがとう。私はすでにこれにうんざりしているので、後悔はありません。 :) –

答えて

1

いくつかの時間を、私はリターンをたくさん書いていますので、私はこの質問をしていますし、それは私には奇妙に見えます。 中

setTimeout(function, timeout) 

関数の戻り値は基本的に無視されます。 あなたのコードでは、関数が返ってくるのは興味深いことではありません。興味深いのは、呼び出す検索メソッドと更新メソッドが約束を返し、これらの約束についてthenメソッドを呼び出すということです。

ので、return文を削除し、

setTimeout(() => { 
    function1().then((result) => { 
     function2(something_based_on_result).then((result2 => {...}) 
    })}, 1000) 

のようなコードで終わることは一般的なJavascriptの練習です。 これらの鎖の長さを減らすための様々なアプローチがあります。あなたが7.6よりも大きいノードを使用している場合 、あなたは非同期関数を使用してのようなものを書くことができます。

async function foo(){ 
    let result = await function_returning_promise() #calls then on the promise under the covers 
    let result2 = await function2(data_based_on_result) 
} 

および非同期パターンは非常に一般的になることを数年で。今日では、連鎖シリーズは、人々が書いたものになる傾向があります。

+0

コマンドラインオプションなしでデフォルトになったバージョンを教えてください。アドバイスをいただきありがとうございます。 –

+0

:) –

+0

@ J.Doe私の答えがあなたの質問に答えるなら、それを受け入れてください。 –

関連する問題