js 吗?
generator 原意是生成器 作为无限数组来使用
后来发现 generator 配合 Promise 可以非常方便的解决异步回调的问题 于是 generator 就被用来做异步处理了 比如 koaJS 这个框架
再后来发现 不行啊 generator 语义上原本就不是用来做异步处理的 但是这个实在太好用了 于是 ES2016 就把 generator 处理异步的分发重新封装了一下 改进了下语法 改成了 async 和 await 的形式
所以这大概就是他们俩的关系
generator 的语义,远远没有 async / await 直观好理解吧
Python 里的 generator 感觉像 static 函数,保存上下文
async 和 await 是用来多线程的
大概吧
= =! python 里的 generator 和 static 以及保存上下文完全是三个东西啊
保存上下文的概念是闭包
generator 就是一个可迭代的元素 当然你可以加入闭包的功能
static 是类上的公有方法
在Node.js中,generator和async/await都是用于处理异步编程的机制,但它们在工作原理和使用方式上有着本质的区别。
Generator
Generator函数使用function*声明,并且可以通过yield关键字暂停和恢复执行。它们主要用于手动控制异步流程,通过调用.next()方法来逐步推进执行。
function* gen() {
const result = yield fetchData(); // 暂停执行,等待fetchData()完成
console.log(result);
}
const g = gen();
g.next().value.then(data => g.next(data));
Async/Await
async/await是基于Promise的异步编程语法糖,使异步代码看起来和同步代码几乎一样。async函数返回一个Promise,而await关键字用于等待一个Promise完成,并返回其结果。
async function asyncFunc() {
const result = await fetchData(); // 等待fetchData()完成,然后继续执行
console.log(result);
}
asyncFunc();
本质区别
- 控制流:Generator需要手动调用
.next()来控制执行流程,而async/await是自动控制的,更符合直觉。 - 错误处理:Generator需要手动捕获和传递错误,而
async/await可以直接使用try...catch进行错误处理。 - 可读性:
async/await语法更简洁,可读性更高,更适合复杂的异步逻辑。
总结来说,async/await是现代JavaScript中处理异步编程的首选方式,因为它更简洁、更易于理解和维护。
