2016-05-02 71 views
1

我正在使用node.js構建應用程序,並希望確認有關模塊和節點異步性質的問題。如果我有一個模塊,如:Node.js - 異步方法調用問題

var email_list = function() { 
    //perform some database query or calculation 
} 

exports.email_to = function() { 

    email_list.forEach(function(email) { 
     console.log(email); 
    }); 

}; 

而在另一個文件中,我把我的email_to方法,它的功能email_list被調用我的email_to函數被調用之前?如果沒有,有沒有辦法保證在email_list函數之後調用email_to函數?

在此先感謝〜

+1

你EMAIL_LIST功能行不通你期望的方式,因爲它包含一個承諾 – tier1

+0

感謝 - 我只是編輯它,使之更通用的 –

+0

有沒有來電到你的代碼中的'email_list'函數,所以不,它不會在'email_to'之前被調用。只有在你打電話時纔會調用函數。 – JLRishe

回答

2

我評論過,但我會詳細說明一點。你會想要做這樣的事情:

var email_list = function() { 

    return knex('email_list').where({ 
      verified: true 
     });  
}; 

exports.email_to = function() { 

    var response = email_list() 
     .then(function(emailList){ 
      emailList.forEach(function(email){ 
       console.log(email); 
      }); 
     }); 
}; 

有很多關於Node和Javascript的事件生命週期的文檔。在很高的層面上,你將要研究承諾和回調如何工作。這就是你如何「保證」你所期望的事情。

在這種情況下,email_list返回承諾。您可以在您的email_to函數中使用該承諾的結果。您等待承諾的結果通過使用然後

+1

超高級別。我希望這不會讓你的問題更加混亂。 – tier1