做了个event发送和超时等待程序, 结果小程序不能用, 只适用于node
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