本教程操作环境:windows10系统、nodejs 12.19.0版本、Dell G3电脑。
node同步与异步的区别是什么
同步就是程序自上而下运行,而异步就是不用等待上面的运行完后再运行下面的操作。异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了。
同步的英文:sync(synchronization)
异步的英文:async(asynchronous)
同步API:只有当前API执行完成后,才能继续执行下一个API
console.log("before"); console.log("after");
异步API:当前API的执行不会阻塞后续代码的执行
console.log("before");setTimeout( () => { console.log("last");}, 2000);console.log("after");
同步API, 异步API的区别( 获取返回值 )
同步API可以从返回值中拿到API执行的结果, 但是异步API是不可以的(好像在异步API里面写return也是拿不到结果的?)
// 异步 function getMsg () { setTimeout(function () { return { msg: "Hello Node.js" } }, 2000); } const msg = getMsg (); //函数没有写return 默认是返回 undefinedcnsole.log(msg); // 输出的是 undefined,因为定时器还没执行完就执行了输出
回调函数
自己定义函数让别人去调用。
// getData函数定义 function getData (callback) {} // getData函数调用 getData (() => {});/*例子------------------*/function getMsg (callback) { setTimeout(function () { callback ({ msg: "Hello Node.js" }) }, 2000);}getMsg (function (msg) { console.log(msg);});
同步API, 异步API的区别(代码执行顺序)
同步API从上到下依次执行,前面代码会阻塞后面代码的执行
异步API不会等待API执行完成后再向下执行代码
代码执行顺序分析
JavaScript分为同步代码执行区和异步代码执行区,它们之间有回调函数队列连接。首先,JavaScript会执行同步代码区的全部内容,然后再去异步代码区执行代码,查找异步代码区执行完成的代码块,找到就马上去找到这个异步代码块对应的回调函数放到同步代码执行区来执行
Node.js中的异步API
读取文件API,有回调函数。
事件监听的API,也有回调函数。(事件处理函数就是回调函数,事件监听API就是异步API)
如果异步API后面代码的执行依赖当前异步API的执行结果,但实际上后续代码在执行的时候异步API还没有返回结果,这个问题要怎么解决呢?
比如有个需求:依次读取A文件、B文件、C文件(读完A再读B接着读C,不能同时读取)
如果实现上面这个需求就会导致将B读取的操作放到A的回调函数里面,而读取C的操作放到B的回调函数里面,导致嵌套层次很多(回调地狱)
const fs = require("fs");fs.readFile("./1.txt", "utf8", (err, result1) => {console.log(result1)fs.readFile("./2.txt", "utf8", (err, result2) => {console.log(result2)fs.readFile("./3.txt", "utf8", (err, result3) => {console.log(result3)})})});
推荐学习:《nodejs视频教程》
以上就是node同步与异步的区别是什么的详细内容,更多请关注php中文网其它相关文章!