Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在node.js中强制同步?_Node.js - Fatal编程技术网

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

如何在node.js中强制同步?,node.js,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()

我一直在试图理解如何在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');
});
这并不像你期望的那样有效——在我所有的尝试中,来自谷歌的响应代码总是排在最后

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

因此,如果只有google响应到达,执行将转到下一个函数。

这似乎已经解决了它。我需要详细了解如何让node.js中的调用堆栈发挥我的优势,因为它都是异步的。异步模块将满足您的大多数需求。仔细看一下并行函数,我经常使用它,这很有帮助。