1、async await 和Promise
- async/await 是 JavaScript 中用于处理异步操作的语法糖,它实际上是基于 Promise
对象的一种语法简化。在底层,async/await 依然使用 Promise 来管理异步操作,只是通过更直观的方式来书写异步代码
2、实现原理
- 将es6语法async/await转为es5的实现原理是基于生成器(Generator)和 Promise
3、Generator函数
- Generator 函数是 ES6 引入的一种特殊函数,它可以在函数执行过程中暂停并在需要时恢复执行。通过使用 function*关键字来定义 Generator 函数,函数内部使用 yield 关键字可以暂停函数执行并返回一个中间结果,同时保留函数的上下文状态,方便后续再次调用。Generator 函数返回的是一个可迭代对象,所以结合这点通过遍历可以依次执行,
function* generatorFunction() {
yield 1;
yield 2;
yield 3;
}
const generator = generatorFunction();
console.log(generator.next());
console.log(generator.next());
console.log(generator.next());
console.log(generator.next());
function* waitAndPrint() {
yield new Promise((resolve) => {
setTimeout(() => {
resolve(1);
}, 1000);
});
yield new Promise((resolve) => {
setTimeout(() => {
resolve(2);
}, 2000);
});
yield new Promise((resolve) => {
setTimeout(() => {
resolve(3);
}, 3000);
});
}
const generator = waitAndPrint();
function handleResult(result) {
console.log(result);
const next = generator.next();
if (!next.done) {
next.value.then(handleResult);
}
}
generator.next().value.then(handleResult);