如何使用代理显示Promise内部插槽值?

时间:2019-05-02 17:20:50

标签: javascript promise

我听说Promise实例中有一些内部插槽。

[[PromiseState]] 
[[PromiseResult]] 
[[PromiseFulfillReactions]] 
[[PromiseRejectReactions]] 
[[PromiseIsHandled]]

无法查看其值。但是,ES6中有一个Proxy构造函数,可帮助使用get / set陷阱显示值。

当我们在普通对象中添加一些值时,可以做某事。但是,当将某些值放入[[PromiseResult]]内部插槽时,是否可以做些什么?

1 个答案:

答案 0 :(得分:1)

不。内部插槽甚至可能不存在。它们是在内部定义JS行为的规范的一种方式。引擎不必实现这些。

如果您真正的问题是“如何同步检测承诺是否得以解决” ...

  function didResolve(promise) {
    let resolved; 
    promise.then(value => resolved = value);
    return function check() { return resolved; };
  }

  const task = Promise.resolve(42);
  const checker = didResolve(task);

  console.log(checker()); // undefined
  setTimeout(() => { console.log(checker()); /*42*/ });