Promise的外部处理

之前看scratch-vm的源码经常能看到这样的处理。但是当年比较蠢,没理解这样做的缘由。

最近也需要处理这样的问题,先说一下场景:

执行某个操作,触发一个事件,触发该事件后作为该操作的resolve。

  • 直接监听后resolve

    1
    2
    3
    4
    5
    6
    fn() {
    return new Promise(resolve => {
    dosth()
    sth.onEvent = resolve()
    })
    }
  • 将resolve传出Promise内部

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    var obj = {
    ok: null,
    cancel: null
    }

    function fn() {
    return new Promise((resolve, reject) => {
    obj.ok = resolve;
    obj.cancel = reject;
    })
    }
    fn()
    .then(res => console.log('then', res))
    .catch(err => console.log('catch', err));

    sth.onEvent = obj.ok
    sth.onerror = obj.cancel