我使用mocha测试框架自动化了一个网页,并提出了同步和异步代码这两个术语。
我很熟悉发送http请求时的同步和异步事件……但我从未听说过代码是同步和异步的。
任何人都想解释……我在之前的问题上看到,这与回调有关,但即便如此,我仍然对这个概念感到困惑。

最佳答案

下面是我的服务器代码的简化版本。我演示了同步代码(在开始执行操作之后,在完成之前不会再开始进一步的操作)和异步代码(先开始执行操作,然后继续执行其他操作,稍后再“回调”或从第一个操作获得结果)。
这有一些重要的后果。几乎每次调用异步函数时:
异步函数的返回值是无用的,因为该函数将立即返回,尽管查找结果需要很长时间。
您必须等到执行回调函数才能访问结果。
调用异步函数之后的代码行将在运行异步回调函数之前执行。
例如,下面代码中console.logs的顺序如下:

line 3 - before sync
line 8 - after sync, before async
line 16 - after async call, outside callback
line 14 - inside async call and callback



// synchronous operations execute immediately, subsequent code
// doesn't execute until the synchronous operation completes.
console.log('line 3 - before sync');
var app = require('express')();
var cfgFile = require('fs').readFileSync('./config.json');
var cfg = JSON.parse(cfgFile);
var server = require('http').createServer(app);
console.log('line 8 - after sync, before async');

// When you call an asynchronous function, something starts happening,
// and the callback function will be run later:
server.listen(cfg.port, function(){
  // Do things that need the http server to be started
  console.log('line 14 - inside async call and callback');
});
console.log('line 16 - after async call, outside callback');

关于javascript - 同步与异步Node.js,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31257638/

10-11 17:25
查看更多