node版本

作为tools.js的功能, 代码如下

const EventEmitter = require('events');
const eventEmitter = new EventEmitter();

  // 事件发射
  emitEvent(event, arg){
    eventEmitter.emit(event, arg)
  },

  //等待事件, 成功则返回args, 失败则返回null
  async waitEvent(event, timeout = 500){
    return new Promise((resolve, reject) => {
      let timer = setTimeout(() => {
        reject(timeout) // 如果用await waitEvent(),则抛出异常值为timeout
      }, timeout)
        // 监听消息事件
      const messageListener = (arg) => {
          clearTimeout(timer); // 清除定时器
          eventEmitter.removeListener(event, messageListener); // 移除监听器
          resolve(arg); // 解决Promise,返回数据
      };

      eventEmitter.on(event, messageListener); // 添加监听器
    })
  }

使用示例:

f = async ()=>{
  setTimeout(()=>tools.emitEvent('laugh',"hahaha"), 100)
try{
  let res = await tools.waitEvent('laugh', 500)
  console.log("res is", res)
  }catch(e){console.log('timeout', e)}
}
f() // 打印: res is hahaha

标签: none 阅读量: 298

添加新评论