与发电机的异步流量

生成器是能够暂停然后恢复执行的功能。这允许使用外部库(主要是 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