JavaScript系列之同步API与异步API


一、同步API

只有当前API执行完成后,才能继续执行下一个API

console.log("before");
console.log("after");

二、异步API

当前API的执行不会阻塞后续代码的执行

console.log("before");
setTimeout(() => {
    
    
	console.log("last");
}, 2000);
console.log("after");

三、同步API,异步API的区别

1、获取返回值

同步API可以从返回值中拿到API执行的结果,但是异步API是不可以的。

// 同步
function sum(n1, n2) {
    
    
	return n1 + n2;
}
const result = sum(10, 20);
// 异步
function getMsg() {
    
    
	setTimeout(function () {
    
    
		return {
    
     msg: "Hello Node.js" };
	}, 2000);
}
const msg = getMsg();

2、代码执行顺序

同步API从上到下依次执行,前面代码会阻塞后面的代码的执行

for (var i = 0; i < 100000; i++) {
    
    
	console.log(i);
}
console.log("for循环后面的代码");

异步API不会等待API执行完成后再向下执行代码

console.log("代码开始执行");
setTimeout(() => {
    
    
	console.log("2秒后执行的代码");
}, 2000);
setTimeout(() => {
    
    
	console.log('"0秒"后执行的代码');
}, 0);
console.log("代码结束执行");

四、回调函数

自己定义的函数让别人去调用

// getData函数定义
function getData(callback) {
    
    }
// getData函数调用
getData(() => {
    
    });

五、使用回调函数获取异步API执行结果

function getMsg(callback) {
    
    
	setTimeout(function () {
    
    
		callback({
    
     msg: "Hello Node.js" });
	}, 2000);
}
getMsg(function (msg) {
    
    
	console.log(msg);
});

六、代码执行顺序分析

console.log("代码开始执行");
setTimeout(() => {
    
    
	console.log("2秒后执行的代码");
}, 2000);
setTimeout(() => {
    
    
	console.log('"0秒"后执行的代码');
}, 0);
console.log("代码结束执行");

在这里插入图片描述

七、Node.js中的异步API

fs.readFile("./demo.txt", (err, result) => {
    
    });
var server = http.createServer();
server.on("request", (req, res) => {
    
    });

如果异步API后面代码的执行依赖当前异步API的执行结果,但实际上后续代码在执行的时候异步API还没有返回结果,这个问题要怎么解决呢?

fs.readFile("./demo.txt", (err, result) => {
    
    });
console.log("文件读取结果");

需求:依次读取A文件、B文件、C文件

写在最后

如果你感觉文章不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果你觉得该文章有一点点用处,可以给作者点个赞;\\*^o^*//
如果你想要和作者一起进步,可以微信扫描二维码,关注前端老L~~~///(^v^)\\\~~~
谢谢各位读者们啦(^_^)∠※!!!

猜你喜欢

转载自blog.csdn.net/weixin_62277266/article/details/127096107