index.js
const logTime = name => {
console.log(`Log...${name}` + new Date().toLocaleDateString())
}
exports.event = async () => {
const asyncFunction = name => event => {
setTimeout(() => {
logTime(name)
event.emit('end')
}, 100);
return event
}
const ary = [
asyncFunction('event 1'),
asyncFunction('event 2'),
asyncFunction('event 3')
]
// EventEmitter 就是典型的发布订阅模式
const { EventEmitter } = require('events')
const event = new EventEmitter()
let i = 0;
event.on('end', () => i < ary.length && ary[i++](event))
event.emit('end')
}
声明了一个jest文件
index.spec.js
test('event', (done) => {
const { event } = require('../index')
event()
// 延迟一秒结束
setTimeout(() => {
done()
}, 1000);
})
最后执行结果,完活