export default class A {
public Resume: () => void;
public Paused: Promise<void>;
constructor() { }
public Start() {
process.nextTick(async () => {
await (this.Paused || Promise.resolve());
console.log('runing job');
// 此处必须要用setTimeout包裹 否则在process.nextTick中调用process.nextTick会死循环
// 用setTimeout包裹后process.nextTick中的事件运行完就会进入下一次事件循环
setTimeout(() => {
this.Start();
}, 1000);
});
}
public async Pause() {
console.log('pause');
this.Paused = new Promise(resolve => {
this.Resume = () => {
console.log('resume');
resolve();
this.Paused = null;
};
});
}
}
const a = new A();
a.Start();
setTimeout(() => {
a.Pause();
setTimeout(() => {
a.Resume();
setTimeout(() => {
a.Pause();
setTimeout(() => {
a.Resume();
}, 3000);
}, 3000);
}, 3000);
}, 3000);
nodejs使用promise和process.nextTick实现暂停
最新推荐文章于 2024-07-16 13:57:02 发布