如何在node.js中强制同步?

我一直在试图了解如何在nodejs中强制同步,但是我在大多数尝试中都失败了。

例如这个代码:

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'); }); 

这不符合你的期望 – 在我的所有尝试中,来自Google的响应代码总是最后一次。

 Hello from 1! 7 Bye from 3! done 200 

我怎样才能让这些函数按顺序依次运行,无论是否使用模块?

因为在Google请求代码中,您正在调用callback而无需等待答案。 正确的做法应该是:

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

因此,如果只有谷歌响应已经到来,执行将转到下一个function。