day88-异步迭代生成器

前言

本文展示一个任务流程控制,通过生成器来解决解决回调问题。


Photo by Dan Magatti on Unsplash

回调方法

function foo(x, y, cb) {
ajax(
'http://some.url.1',
cb
)
}
foo (11, 32, function(err, next) {
if (err) {
console.error(err)
} else {
console.log(text)
}
})

生成器方法实现

// 通过生成器来表达同样的任务流程控制
function foo(x, y) {
ajax(
'http://some.url.1',
function(err, next) {
if (err) {
// 向*main()抛出一个错误
it.throw(err)
} else {
// 响应数据恢复生成器
it.next(data)
}
}
)
}
function *main() {
try {
// 重要的部分。调用一个普通函数foo(..),且能从ajax调用中得到text,即使函数是异步。
let text = yield foo(11, 31)
console.log(text)
} catch (err) {
console.error(err)
}
}
let it = main()
// 启动!
it.next()
文章作者: lmislm
文章链接: http://lmislm.com/2019/04/09/2019-04-09/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LMISLMのBlog