在js中需要让某些异步的任务按顺序执行的时候可以Promise.then(Promise).then.....
但是有时候任务不是固定的,无法按照这种固定的模式写下去,需要其他的实现
/**
* 锁---
*/
class AWaitLock {
constructor() {
this.lockQueue = [];
this.locked = false;
}
async lock() {
if (this.locked) {
let that = this;
await new Promise((resolve) => {
that.lockQueue.push(resolve);
});
}
this.locked = true;
return true;
}
unlock() {
this.locked = false;
let resolve = this.lockQueue.pop();
if (resolve) {
resolve();
}
}
}
这是ES6 async,await版本的,借助Promise的resolve,当前面的异步事件执行完后,会调用后面任务的resolve,后面的会执行。
纯Promise的也好实现,不过需要各种回调。
网友评论