qappleh / Interview

我是追梦赤子心,公众号「深圳湾码农」的作者,某上市集团公司高级前端开发,深耕前端领域多年,每天攻破一道题,带你从0到1系统构建web全栈完整的知识体系!
https://github.com/qappleh/Interview
1.14k stars 95 forks source link

Day363:等待event事件,返回promise,如果事件触发,则resolve,如果有error事件触发,则reject? #366

Open qappleh opened 3 years ago

qappleh commented 3 years ago

我们在封装 SDK 时,经常会遇到一类情况:需等待某个远程服务就绪,通常会通过 event 来触发 ready 或 error 事件, 现需要把它封装为更现代化的方式,支持 await 调用,如 `await awaitEvent(job, 'ready')。

*注意避免内存泄露

function awaitEvent(emitter, event) {
  // 待实现
};
geek-lu commented 3 years ago
function awaitEvent(emitter, event) {
    let pms = new Promise((res, rej) => {
        emitter.on(event, (...arg) => {
            res(...arg);
            pms = null;
        })
        emitter.on('error', err => {
            rej(err);
            pms = null;
        })
    })

    return pms;
};
geek-lu commented 3 years ago

没太理解题意