node.js异步编程

同步API:只有当前API执行完成后,才能继续执行下一个API
console.log('before');
console.log('after');

异步API:当前API的执行不会阻塞后续代码的执行
console.log('before');
setTimeout(
	()=>{
		console.log('last');
	},2000);
console.log('after');

代码会优先依次执行同步代码再依次执行异步代码,异步代码的结果不能通过返回值得到,需要通过回调函数,如果想要先执行异步代码,必须把同步代码写在异步的回调函数中,但是会造成代码嵌套,难以维护
例:
在这里插入图片描述

Promise出现的目的是为了解决异步编程中代码嵌套的问题
把异步代码写在new Promise的对象里面

let promise = new Promise((resolv,reject) => {
		setTimeout(() => {
			if(true){
				//把异步执行成功的时候用resolve函数把结果传递出去
				resolve({name:'张三'});
			}else{
				//把异步执行失败的结果传递出去
				reject('失败了');
			}
		},2000);
});

//resolve执行的就是promise.then里面的result函数
promise.then(result => console.log(result);//{name:'张三'})
			 .catch(error => console.log(error)//失败了);

示例代码:
const fs = require('fs');
let promise = new Promise((resolve,reject) => {
	fs.readFile('./1.txt','utf8',(err,result) => {
		if(err != null){
			reject(err);
		}else{
			resolve(result);
		}
	});
});

promise.then((result) => {
	console.log(result);
})
.catch((err) => {
	console.log(err);
})


在这里插入图片描述
promise对象可以连续.then(),第一个then()中的回调函数中返回的promise对象是第二个then()的调用者

异步函数:简便化promise对象的使用

1.在普通函数定义的前面加上async关键字,普通函数就变成了异步函数
2.异步函数默认的返回值是promise对象
3.代码执行成功则直接使用return返回对象,失败则使用throw抛出错误信息
const fn = async () => {};
async function fn () {}

在这里插入图片描述

await关键字:
1.它只能出现在异步函数中
2.await后面只能跟promise对象,它可以暂停异步函数的执行,等待promise对象返回结果后再向下执行

实例代码:依次输出r1 r2 r3

在这里插入图片描述

在这里插入图片描述
可以把一个函数封装成返回promise对象的函数:
const promisify = require(‘util’).promisify;

让readFile函数有返回promise对象
const readFile = promisify(fs.readFile);

await后面跟promise对象,会自动执行.then()方法,可以直接获得需要的信息
let r1 = await readFile(’./1.txt’,‘utf8’);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值