【发布时间】:2022-06-14 16:30:20
【问题描述】:
我不知道这是否重复,但我找不到答案。
我正在为 Web 应用程序开发一个 Typescript 库。
我需要一个函数f,它需要顺序调用其他函数并发出事件以供调用者监听。
伪代码:
function f(arg1, arg2, arg3) {
const r1 = b()
// wait for b execution
emit('phase1', r1)
const r2 = c()
// wait for c execution
emit('phase2', r2)
const r3 = d()
// wait for d execution
emit('phase3', r3)
}
f('1', 3, '4').once('phase1', doSomething).once('phase3', somethingElse)
使用 async/await 将允许我按顺序执行内部函数,但在这种情况下,f 将需要返回一个 Promise,从而失去发出事件的可能性。
如果我选择返回一个事件发射器,我会失去可读性,因为无法按顺序等待内部函数。
我发现了这个有趣的库 Promievent,受 web3 的启发,但是,由于我认为这是一个不那么罕见的应用程序,我想知道是否有更好的方法/模式可以使用。
【问题讨论】:
-
doSomething和somethingElse到底是做什么的?你关心他们是否按那个顺序被调用吗?您是否需要像“事件侦听器”一样注册它们,您是否已确定.once(…)语法? -
@alain ...关于到目前为止提供的答案/方法,还有什么问题吗?
-
尽管答案很好,但由于需要调用迭代器,我发现生成器方法并不理想。我发现 Promievent 方法更适合我的需求。
标签: javascript function asynchronous generator eventemitter