2016-10-05 7 views
-1

次のコードがあります。str配列はfetchRows関数のjsonオブジェクトで追加されます。問題は、fetchrowsから値をフェッチする前にstrを送信していることです。基本的には、配列strを送る前に4つのメソッドを終了します。一連のメソッドがnode.jsを完了するのを待ちます

var app = express(); 
app.get('/data', function (req, res) { 
    str = []; 
    async.waterfall([connect, execute, fetchRows], done);  
    wait.launchFiber(done); 
    res.send(str); 
    console.log("in done" + str); 
    //res.send(str); 
}); 

任意のポインタを理解してください。

答えて

-1

注:私は知りません

nodejs非同期(async)イベント駆動システム、ブロックされた方法で書き込ま除いて何もブロックしています。ノードエンジンはそれが関数を呼び出す行

async.waterfall([connect, execute, fetchRows], done); 

に到達したときにどのような上記のコード内で起こることです。これは、非同期モジュールであり、関数が実行される前にconnectが呼び出されて終了することを保証し、次にfetchRowsを呼び出します。しかし、すぐにノードのヒット、それはブロックされません。この行は、それが将来のある後の時点で何をすべきかを挿入し、そう

res.send(str); 

下の行に続けて、明らかにこれは最初の

簡単にソリューションを終了します

は、私にはわからない覚えているこのソリューションは、単にあなたの再ラップすることですどういう

var app = express(); 
app.get('/data', function (req, res) { 
    str = []; 
    async.waterfall([connect, execute, fetchRows, finish], done);  

    // I don't know what this line does 
    wait.launchFiber(done); 

    function finish() { 
     res.send(str); 
    } 

}); 

非同期sponse.send(str)を関数に追加し、最後にfetchRowsの後に呼び出す関数を指定します。

+0

うわー。どうもありがとうございました。 –

+0

歓迎ですが、答えをアップアップするのを忘れないでください。 –

関連する問題