與發電機的非同步流量
生成器是能夠暫停然後恢復執行的功能。這允許使用外部庫(主要是 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