Tags

  • AWS (7)
  • Apigee (3)
  • ArchLinux (5)
  • Array (6)
  • Backtracking (6)
  • BinarySearch (6)
  • C++ (19)
  • CI&CD (3)
  • Calculus (2)
  • DesignPattern (43)
  • DisasterRecovery (1)
  • Docker (8)
  • DynamicProgramming (20)
  • FileSystem (11)
  • Frontend (2)
  • FunctionalProgramming (1)
  • GCP (1)
  • Gentoo (6)
  • Git (15)
  • Golang (1)
  • Graph (10)
  • GraphQL (1)
  • Hardware (1)
  • Hash (1)
  • Kafka (1)
  • LinkedList (13)
  • Linux (27)
  • Lodash (2)
  • MacOS (3)
  • Makefile (1)
  • Map (5)
  • MathHistory (1)
  • MySQL (21)
  • Neovim (10)
  • Network (66)
  • Nginx (6)
  • Node.js (33)
  • OpenGL (6)
  • PriorityQueue (1)
  • ProgrammingLanguage (9)
  • Python (10)
  • RealAnalysis (20)
  • Recursion (3)
  • Redis (1)
  • RegularExpression (1)
  • Ruby (19)
  • SQLite (1)
  • Sentry (3)
  • Set (4)
  • Shell (3)
  • SoftwareEngineering (12)
  • Sorting (2)
  • Stack (4)
  • String (2)
  • SystemDesign (13)
  • Terraform (2)
  • Tree (24)
  • Trie (2)
  • TwoPointers (16)
  • TypeScript (3)
  • Ubuntu (4)
  • Home

    JavaScript Revealing Constructor

    Published Dec 05, 2019 [  Node.js  ]

    const promise = new Promise(function(resolve, reject) {
        // ...
    })
    

    Promise accepts a function as a constructor argument, which is called the executor function. This function is called by the internal implementation of the Promise constructor and it is used to allow the constructing code to manipulate only a limited part of the internal state of the promise under construction. In other words, it serves as a mechanism to expose the resolve and reject functions so that they can be invoked to change the internal state of the object.

    The advantage of this is that only the constructing code has access to resolve and reject and once the promise object is constructed, it can be passed around safely; no other code will be able to call reject or resolve and change the internal state of the promise.

    A read-only event emitter

    Read-only event emitter is a special kind of event emitter which is not possible to call the emit method (apart from within the function passed to the constructor)

    const EventEmitter = require('events');
    
    module.exports = class Roee extends EventEmitter {
        constructor(executor){
            super()
            const emit = this.emit.bind(this);
            this.emit = undefined;
            executor(emit);
        }
    }
    
    const Roee = require('./roee')
    
    const ticker = new Roee(emit => {
        let tickCount = 0;
        setInterval(() => emit('tick', tickCount++), 1000)
    })
    
    module.exports = ticker
    
    const ticker = require('./ticker')
    
    ticker.on('tick', tickCount => console.log(tickCount, 'TICK'));
    ticker.emit('something', {}); // this will fail
    

    References

    • Node.js Design Patterns