2017-10-03 6 views
0

非同期関数によって返された値をコンソールに出力しようとすると、未定義になります。nodejs-非同期関数によって返されたデータを保存できません

これは非同期DBHelperModel.js

dumyController.js

におけるモデル関数からデータをフェッチした 、DRYアプローチのために、ヘルパーに書き込まれた機能( DBHelper.js)を呼び出す私のコントローラ機能( dumyController.js)で起こっています
var dbHelpers = require('../helpers/helpers'); 
exports.dumyControllerFunc = function (req, res) { 
    var result= dbHelpers.dumyHelperFunc(165); 
    console.log(result); 
}; 

DBHelper.js

var dbHelp = require('../models/DBHelperModel'); 
module.exports = { 
    dumyHelperFunc: function (userId) { 
    dbHelp.fetchDataFromDB(userId, function (err, rows) { 
     var res; 
     if (err) { 
      return null; 
     } 
     else { 
      res.send(rows.member_code); 
     } 
    }); 
    } 
}; 

DBHelperModel.js

var db = require('../db'); 
var DBHelpers = { 
    fetchDataFromDB: function (userId, callback) { 
    var query = `SELECT member_code FROM members where id=?`; 
    db.query(query, userId, callback); 
    }, 
}; 
module.exports = DBHelpers; 

db.js

var mysql = require('mysql'); 
var connection = mysql.createPool({ 
    host: '127.0.01', 
    user: 'root', 
    password: '', 
    database: 'dumyDB' 
}); 
module.exports = connection; 

私は私が原因で機能の非同期性の値が届かないが、誰がどのように私に言うことができます知っています上記のようなアーキテクチャで値を取得します。私はnodeJSが初めてです。ありがとう!

答えて

0

は、これはおそらく、あなたが達成しようとしているもの: https://repl.it/MA0Z/0

var DBHelpers = { 
    fetchDataFromDB: function (userId, callback) { 
     callback(null, 'hello fetchDataFromDB'); 
    }, 
}; 

var dbhelp = { 
    dumyHelperFunc: function (userId, callback) { 
     DBHelpers.fetchDataFromDB(userId, function (err, rows) { 
     if (err) { 
      callback('error bro'); 
     } else { 
      callback(null, rows); 
     } 
    }); 
    } 
} 

dbhelp.dumyHelperFunc(165, function (error, result) { 
    console.log(result); 
}); 
+0

これは機能しませんでした。私はあなたが言及したようにコードを変更した後、コンソールで未定義になってきました。 @Levarne Sobotker – Annabelle

+0

私の投稿を編集します。 –

+0

これは機能しません。私はあなたが提供したバイダルを走らせました。私も同様に定義されていません。私はこれが結果をもたらすとは思わない。 – Annabelle

1

私はあなたがnodejsで非同期についての解決策をしたいと思います。

  • promise、それは普遍的かつ一般的なソリューションである
  • callbackを使用し、それはnodejsの方法でアプローチです、とにかく、それはネイティブnodejsの非同期ソリューションです。
  • その他asysn:Generateasync、それはES6機能だし、後者はnodejs7によってサポート+

あるpromiseはほとんどがお勧めです、それはasycnチェーンを持っている場合、callbackが悪い上に見える美貌構造を有していますそれ。

+0

サンプルを共有できますか?あなたが約束したリンクは、私が推測する中国語のフォントです。ページを翻訳した後でさえ、コンテンツの半分はまだ中国語です。 @sinbar – Annabelle

+0

申し訳ありませんが、私は 'promise'のリンクを編集します – sinbar

関連する問題