我一直在尝试了解如何在 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');
});
这并不像您期望的那样工作 - 在我的所有尝试中,来自 Google 的响应代码始终排在最后。
Hello from 1!
7
Bye from 3!
done
200
如何在使用或不使用模块的情况下让这些函数按顺序一一运行?
最佳答案
因为在 Google 请求代码中,您正在调用回调而不等待答复。正确的做法应该是:
var google = function (cb) {
r('http://google.com', function (err, res, body) {
console.log(res.statusCode);
cb();
});
}
因此,如果只有 google 响应到达,执行就会转到下一个函数。
关于node.js - 如何在 Node.js 中强制同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10643072/