美文网首页
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