【发布时间】:2016-09-06 04:18:02
【问题描述】:
我正在寻找一种方法来了解何时发出 event 并且所有处理程序都已完成触发。
下面的代码记录了以下内容:
after do something
undefined
do something one
do something two
而我正在寻找的是这样的:
do something one
do something two
after do something
undefined
代码如下:
import Promise from 'bluebird'
import { EventEmitter } from 'events'
let event = new EventEmitter()
let doSomethingOne = Promise.resolve().then(() => console.log('do something one'))
let doSomethingTwo = Promise.resolve().then(() => console.log('do something two'))
event.on('myEvent', async function () {
return await doSomethingOne()
})
event.on('myEvent', async function () {
return await doSomethingTwo()
})
async function main() {
event.emit('myEvent', {'name': 'tom'})
// await event.finalized('myEvent')
console.log('after do something')
}
main()
.then(console.log)
.catch(console.error.bind(console))
在事件、promise 或 javascript 中是否有任何想法可以让您获得回调/promise/await 所有异步事件处理程序?
像这样:
await event.finalized('myEvent')
注意我知道在异步函数中没有真正需要等待一个承诺。这只是为了表明这些事件处理程序是异步的。
【问题讨论】:
-
如果我理解正确,这可能就是您要找的东西? github.com/yortus/asyncawait 但是,这似乎使代码行为更加同步(如生成器),因此如果您真的希望您的代码继续异步,可能还不够
-
在 github gulpjs/bach repo 中寻找 gulp4 的 bach 库。我相信这就是你想要的。它有 .series 和 .parallel,你可以自定义和嵌套任何你想要的。
-
rxjs 来救援! github.com/ReactiveX/rxjs
标签: javascript events promise async-await