与发电机的异步流量
生成器是能够暂停然后恢复执行的功能。这允许使用外部库(主要是 q 或 co)模拟异步函数。基本上它允许编写等待异步结果的函数,以便继续:
function someAsyncResult() {
return Promise.resolve('newValue')
}
q.spawn(function * () {
var result = yield someAsyncResult()
console.log(result) // 'newValue'
})
这允许编写异步代码,就好像它是同步的一样。此外,尝试捕获几个异步块的工作。如果承诺被拒绝,则错误将被下一个 catch 捕获:
function asyncError() {
return new Promise(function (resolve, reject) {
setTimeout(function () {
reject(new Error('Something went wrong'))
}, 100)
})
}
q.spawn(function * () {
try {
var result = yield asyncError()
} catch (e) {
console.error(e) // Something went wrong
}
})
使用 co 将完全相同但使用 co(function * (){...})
而不是 q.spawn