二十七、知识点回顾
1、回调函数方式处理异步所存在的问题
* 无法捕获错误(try catch)
* 不能return
2、生成器
function* foo(a) {
const b = yield a
const c = yield b
return c
}
const iter = foo(1)
console.log(iter.next())
console.log(iter.next(2))
console.log(iter.next(3))
/*
// 伪代码
function foo(a) {
// 相当于从:foo(a) 执行到 yield a
// 可通过foo()传入参数
function 第一个next() {
return { value: a, done: false }
}
// 相当于从:const b 执行到 yield b
// 可通过第二个next()传入参数
function 第二个next(b) {
return { value: b, done: false }
}
// 相当于从:const c 执行到 return c
// 可通过第三个next()传入参数
function 第三个next(c) {
return { value: c, done: true }
}
}
*/
3、从Generator到async/await
function wrap(gen) {
return function (...args) {
const it = gen(...args)
return new Promise(resolve => {
(function next(res) {
const {value, done} = it.next(res)
if (done) {
resolve(value)
} else {
Promise.resolve(value).then(next)
}
})()
})
}
}
const foo = wrap(function* (a) {
const b = yield Promise.resolve(a + 1)
const c = yield Promise.resolve(b + 1)
return c + 1
})
foo(1).then(res => {
console.log(res)
})
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
2020-03-27 springboot整合测试_springboot整合log4j
2020-03-27 SpringBootApplication注解_RestController注解