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

时间:2017-10-25 08:39:26

标签: javascript node.js proxy

我定义了一个代理如下:

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会引发错误'未准备好',即使它不是属性访问权限。在评估对代理的引用时,如何防止引发错误?在没有分配的情况下,这会导致错误。

2 个答案:

答案 0 :(得分:1)

似乎与此错误相关:https://github.com/nodejs/node/issues/10731

我发现的最佳工作是明确忽略节点检查:

@echo off
echo Content-Type: text/html
echo.
CALL PDF_MOVE.bat || goto error
echo file copy successfull
goto :EOF
:error
echo file copy failure

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

答案 1 :(得分:1)

显然,您正在REPL中对此进行评估,其中最终的proxy;语句生成代码的结果值,并将其记录到控制台。记录它将访问预期的属性。

但是,你真的不应该在这里使用代理。代理应该单独处理不同的属性,但是您的属性似乎只关心ready属性。更简单的getter会更合适:

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

const res = { // instead of the `proxy` object
  get ready() {
    if (o1.ready == false) {
      throw new Error('not ready');
    } else {
      return 'ready'
    }
  }
};

res.ready // either throws or yields the string "ready"