5
私はNode.jsを学んでいます。私はいくつかのMySQL接続で作業し始めています。私はデータベースから行のセットを取得するはずの関数を持っていますが、これは正しく機能します。しかし、後でその行を返す方法はわかりません。私は、両方のは、以下のコードセグメント内のコメントで説明した(二つのオプションを試してみました。DBクエリを含むNode.js関数から値を返す方法
function fetchGameList(){
var ret = 0;
connection.query("SELECT * from tbl", function(err, rows, fields) {
//some stuff happens here, and 'ret' is set to a vlue, for instance
//ret = 7;
//ret has the value 7 here, but if I put 'return ret' here, nothing is returned
});
return ret; //returns 0 because Node is asynchronous and the query hasn't finished yet
}
だから、質問は、どのように私はこのケースでret
(7)の正しい値を返すのですか?私もこれを適切に構築アム?
あなたはすぐにこれが管理できなくなることがわかります。非同期関数の長い連鎖を処理するには、[async](https://npmjs.org/package/async)ライブラリをお勧めします。 – qubyte
私はこのような5つの関数があるとき、私はこのようにそれぞれを呼び出して、5つの「レイヤー」関数を作成する必要があることを心配しています。あなたが言ったように、これは簡単に扱いにくくなる可能性があります。私はそれを書くことができますが、後でそれを修正しようとする人には幸運をもたらします。 "非同期"ライブラリは私が必要とするもののように見えます。一見すると、これらの場合に '.series'フローコントロールを使いたいと思うようです。 – jovan
あなたにスポットがあります。 'async.series'はライブラリのもっとも有用なメソッドです。 'async.waterfall'を避けてください。最初はうまく見えますが、あとで修正するのが難しくなります。インラインの匿名関数を記述するのではなく、関数にも名前を付けるようにしてください。これにより、読みやすさが向上し、問題が発生したときにトレースがスタックされます。 – qubyte