VSCode源码分析 - 事件分发

    1. if (this._listeners) {
    2. // 内部/嵌套方式通过emit发出.
    3. // this调用事件驱动
    4. if (!this._deliveryQueue) {
    5. this._deliveryQueue = new LinkedList();
    6. }
    7. for (let iter = this._listeners.iterator(), e = iter.next(); !e.done; e = iter.next()) {
    8. this._deliveryQueue.push([e.value, event]);
    9. }
    10. const [listener, event] = this._deliveryQueue.shift()!;
    11. try {
    12. if (typeof listener === 'function') {
    13. } else {
    14. listener[0].call(listener[1], event);
    15. }
    16. } catch (e) {
    17. onUnexpectedError(e);
    18. }
    19. }