美文网首页
js实现“锁”

js实现“锁”

作者: 田文健 | 来源:发表于2019-07-30 15:52 被阅读0次

在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的也好实现,不过需要各种回调。

相关文章

网友评论

      本文标题:js实现“锁”

      本文链接:https://www.haomeiwen.com/subject/drynrctx.html