好基友async和await之间不能说的秘密

真正意义上去解决异步回调的问题,同步流程表达异步操作,本质上async 是 Generator的语法糖,async和await, 用于优化Generator的使用, 无需再主动调用next。

  1. 不需要像Generator去调用next方法,遇到await等待,当前的异步操作完成就往下执行
  2. 被async修饰的函数,是一个异步函数 返回的总是Promise对象,可以用then方法进行下一步操作
  3. async取代Generator函数的星号*,await取代Generator的yield
async function foo(){
    
    
	await 异步操作;
	await 异步操作;
}

foo(); // 注意: async函数, 总会返回一个Promise对象

示例:定义异步操作时setTimeout来配合Promise+async+await使用
1.定义Promise函数执行异步操作

function timeout(seconds) {
    
     // 延迟方法
	return new Promise(resolve => {
    
    
		setTimeout(resolve, seconds * 1000);
	})
}

2.使用async和await

async function asyncPrint(value) {
    
    
	console.log('函数执行---');
	await timeout(2);
	console.log('2秒后执行?');
	await timeout(4);
	console.log("4秒后执行?");
	console.log(value);
}
asyncPrint('hello async');

console.log("主线程代码----------");

当await 后面的表达式, 返回的是reject/报错信息, 则await不会继续向下执行

如果await后面是一个promise对象, 会直接接受resolve传回来的结果

await 需要配合 Promise 对象来使用

猜你喜欢

转载自blog.csdn.net/qq_43291759/article/details/108867744