use*_*769 5 javascript async-await es6-proxy
我有一个Proxy模仿虚拟物体的方法。该代理的 Getter 返回准备好的值。
我发现,如果等待代理,它会导致调用我的代理的“then”属性:
await myProxy
Run Code Online (Sandbox Code Playgroud)
在这种情况下我的代理 getter 应该返回什么?返回代理本身或对自身的承诺是一个好主意吗?
例子在这里:
让我感到困惑的是,如果我是await一个对象,我会得到该对象,但如果我是awaita Proxy,它需要有一个返回自身的“then”属性陷阱。
您可能会考虑返回undefined一个没有方法的对象then,因为await会递归then调用,直到解析的对象不再有then方法为止。
举个例子:
(async () => {
let p = new Proxy({ then: undefined }, {
get: (target: any, prop: string, self: any) => {
return (prop in target) ? target[prop] : (...args: any[]) => self;
},
});
let example = await p.myChainable().awaitable().method();
console.log("Result: ", example);
})();
Run Code Online (Sandbox Code Playgroud)
它只是返回"Result: { then: undefined },因为我们返回的self内容(...args: any[]) => self当然会被替换为您自己的逻辑。
{ then: undefined }如果你用其他类似的东西替换目标,{ test: "abc" }则根本不会有任何结果,因为承诺永远不会实现,并且 console.log 永远不会被调用。
所以作为结论,不 - 我不建议在then方法中返回代理对象本身。