最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

在评估代理时调用代理获取处理程序

IT培训 admin 5浏览 0评论

在评估代理时调用代理获取处理程序

我定义了一个代理如下:

const o1 = {
      ready: false
    };

setTimeout(() => {
  o1.ready = true;
}, 1000000000);

const handler = {
  get(target, propKey, receiver) {
    if (target.ready == false) {
      throw new Error('not ready');
    } else {
      return 'ready'
    }
  }
};

const proxy = new Proxy(o1, handler);

proxy; // raises 'not ready'

评估proxy会引发错误“未准备好”,即使它不是属性访问。在评估对代理的引用时,如何防止引发错误?在没有分配的情况下,这会导致错误。

回答如下:

它似乎与这个bug有关:https://github/nodejs/node/issues/10731

我发现的最好的工作是专门忽略节点检查:

const handler = {
  get(target, propKey, receiver) {
    if (propKey != util.inspect.custom && 
        propKey != 'inspect' && 
        propKey != Symbol.toStringTag){
      if (target.ready == false) {
        throw new Error('not ready');
      } else {
        return 'ready'
      }
    }
  }
};

或者,如果你知道你关心的密钥列表,那么只需检查那些而不是排除。

在评估代理时调用代理获取处理程序

我定义了一个代理如下:

const o1 = {
      ready: false
    };

setTimeout(() => {
  o1.ready = true;
}, 1000000000);

const handler = {
  get(target, propKey, receiver) {
    if (target.ready == false) {
      throw new Error('not ready');
    } else {
      return 'ready'
    }
  }
};

const proxy = new Proxy(o1, handler);

proxy; // raises 'not ready'

评估proxy会引发错误“未准备好”,即使它不是属性访问。在评估对代理的引用时,如何防止引发错误?在没有分配的情况下,这会导致错误。

回答如下:

它似乎与这个bug有关:https://github/nodejs/node/issues/10731

我发现的最好的工作是专门忽略节点检查:

const handler = {
  get(target, propKey, receiver) {
    if (propKey != util.inspect.custom && 
        propKey != 'inspect' && 
        propKey != Symbol.toStringTag){
      if (target.ready == false) {
        throw new Error('not ready');
      } else {
        return 'ready'
      }
    }
  }
};

或者,如果你知道你关心的密钥列表,那么只需检查那些而不是排除。

发布评论

评论列表 (0)

  1. 暂无评论