你需要有處理程序implement the get() trap並返回約束版本的prom.then
var prom = new Promise(function(resolve, reject){resolve(42)});
var promProxy = new Proxy(prom, {
get: function(target, prop) {
if (prop === 'then') {
return target.then.bind(target);
}
}
});
promProxy.then(function(response){console.log(response)});
注意,如果你只是想代理所有存取,該get
功能應該是這樣的:
var promProxy = new Proxy(prom, {
get: function(target, prop) {
var value = target[prop];
return typeof value == 'function' ? value.bind(target) : value;
}
});
bind
將確保您在處理Na時不會錯誤地調用該函數tive對象,如Promises或控制檯。
編輯:在某些情況下,瀏覽器/節點將有一個過時的代理版本,在這種情況下,您需要使用harmony-reflect以使其保持最新狀態。
*爲什麼*你想試試嗎?事實上,承諾的代理不是本地承諾對象。也許你正在尋找子類? – Bergi