2012-05-17 85 views
1

我一直在試圖理解如何在nodejs中強制實現同步,但我在大多數嘗試中都失敗了。如何在node.js中強制同步?

例如下面的代碼:

var r = require('request'); 
var a = require('async'); 

var hello = function (cb) { 
    console.log('Hello from 1!'); 
    cb(); 
} 

var random = function (cb) { 
    console.log(Math.floor(Math.random() * 10)); 
    cb(); 
} 

var google = function (cb) { 
    r('http://google.com', function (err, res, body) { 
    console.log(res.statusCode); 
    }); 
    cb(); 
} 

var bye = function (cb) { 
    console.log('Bye from 3!'); 
    cb(); 
} 

a.series([hello, google, random, bye], function() { 
    console.log('done'); 
}); 

,你期望它這不工作 - 在我所有的嘗試從谷歌響應代碼總是排在最後。

Hello from 1! 
7 
Bye from 3! 
done 
200 

如何讓這些函數按順序逐一運行,以便使用或不使用模塊?

回答

2

因爲在Google請求代碼中,您正在調用回調而無需等待答案。正確的做法應該是:

var google = function (cb) { 
    r('http://google.com', function (err, res, body) { 
    console.log(res.statusCode); 
    cb(); 
    }); 
} 

因此,如果只有谷歌響應已到達,執行將轉到下一個函數。

+0

這似乎已修復它。我需要了解如何讓node.js中的調用堆棧發揮我的青睞,因爲它們都是異步的。 – faiizow

+1

異步模塊將滿足您的大多數需求。仔細觀察並行功能,我經常使用它,這是有幫助的。 – Mustafa