Node的异步与java的异步_node.js和异步编程回文
以下代碼不是異步的,為什么以及如何制作呢?
function compute(callback){
for(var i =0; i < 1000 ; i++){}
callback(i);
}
我將假設你的代碼試圖說,“我需要做1000次,然后在一切都完成時使用我的回調” .
即使你的for循環也不會在這里工作,因為想象一下:
function compute(callback){
for(var i =0; i < 1000 ; i++){
DatabaseModel.save( function (err, result) {
// ^^^^^^ or whatever, Some async function here.
console.log("I am called when the record is saved!!");
});
}
callback(i);
}
在這種情況下,你的for循環將執行保存調用,而不是等待它們完成 . 因此,在您的示例中,您可能會得到類似的輸出(取決于時間)
I am called when the record is saved
hii
I am called when the record is saved
...
對于你的計算方法,只有當一切都真正完成時才調用回調 - 所有1000條記錄都保存在數據庫中 - 我會查看async Node包,它可以很容易地為你做到這一點, and 為你提供許多異步問題的模式我將面對Node .
所以,你可以重寫你的計算功能:
function compute(callback){
var count = 0
async.whilst(
function() { return count < 1000 },
function(callback_for_async_module) {
DatabaseModel.save( function (err, result) {
console.log("I am called when the record is saved!!");
callback_for_async_module();
count++;
});
},
function(err) {
// this method is called when callback_for_async_module has
// been called 1000 times
callback(count);
);
console.log("Out of compute method!");
}
請注意,您的計算函數的回調參數將在 console.log("Out of compute method") 之后的某個時間被調用 . 此函數現在是異步的:應用程序的其余部分不會等待 compute 完成 .
總結
以上是生活随笔為你收集整理的Node的异步与java的异步_node.js和异步编程回文的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 新手如何使用JavaScript读取js
- 下一篇: Idea创建web项目,配置tomcat