2013-11-21 27 views
2

我在打印兩種說法面臨的一個問題,我有兩個功能Asynchronus功能HANDELING

var mongoose = require('mongoose'); 
var_show_test = mongoose.model('test'); 

exports.showTest = function(req,res) { 
    var jsonString = []; 

    var_show_test.find(function (err, testa) { 
     console.log("In find"); 
    }); 

    console.log("In function"); 
} 

但打印序列中的語句

In function 
In find 

我想是按順序打印報表,例如:

In find 
In function 

我知道這是由於異步調用而發生的,關於回調函數有點困惑。如何處理這些以便按順序打印報表。

+1

如果你來自Java,例如,JS中的回調和異步編程很難理解。這裏有一個類似的問題關於異步的JavaScript:http://stackoverflow.com/questions/16336367/what-is-the-difference-between-synchronous-and-asynchronous-programming-in-node – TheBronx

回答

2

用於起動器,如果你只是想登錄到控制檯,然後就可以把第二console.log到您的回調 -

exports.showTest = function(req,res) { 
    var jsonString = []; 

    var_show_test.find(function (err, testa) { 
     console.log("In find"); 
     console.log("In function"); 
    }); 
} 

但是,如果你希望你找到的回調執行後,執行函數/方法,那麼你需要在這裏使用閉包 -

exports.showTest = (function (callback) { 
    return function(req,res) { 
     var jsonString = []; 

     var_show_test.find(function (err, testa) { 
      console.log("In find"); 
      callback(); 
     }); 
    } 
})(callbackFunc); 

function callbackFunc() { 
    console.log('In my callback!'); 
} 
+0

什麼將在(callbackFunc )? –

+0

@Java_NewBie:傳遞你想在'find'回調中調用的函數/方法名稱。我正在更新我的答案以澄清。 –

+0

當我運行它時,它會打印。在我的回調中。然後在回調()上的錯誤,然後在查找。我想首先打印「找到」,然後「在我的回調中」。我將再次檢查它。 –