2012-05-17 42 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