Generator 与 asnyc await
Generator
生成器函数,返回一个迭代器对象,可以手动调用 next
方法来控制执行,throw
方法抛出错误,return
方法来提前结束,也可以使用 for...of
自动遍历遍历。
function* gen() {
yield 1;
yield 2;
yield 3;
}
let g = gen();
g.next(); // output: { value: 1, done: false }
g.next(); // output: { value: 2, done: false }
g.next(); // output: { value: 3, done: false }
g.next(); // output: { value: undefined, done: true }
for (const value of gen()) {
console.log('value :>> ', value);
}
// output:
// value :>> 1
// value :>> 2
// value :>> 3
asnyc await
其实就是 Generator
的语法糖,只不过内置一个执行器,其返回值是一个 Promise
对象。
function* gen() {
let a = yield Promise.resolve(1);
let b = yield Promise.resolve(2);
return 'end';
}
function run() {
return new Promise((res, rej) => {
try {
const g = a();
function next(data) {
let n = g.next(data);
if (n.done) return res(n.value);
Promise.resolve(n.value).then(next, g.throw);
}
next();
} catch (error) {
rej(error);
}
});
}
run(gen);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通