我已经设置了代理" promisify"像这样的回调函数:
const browser = new Proxy({}, {
get: function(target, name, receiver) {
return function(...args) {
if (userExpectsPromise) { // how to detect this?
return new Promise(resolve => chrome[name](...args, resolve))
} else {
return chrome[name](...args);
}
};
return target[name];
}
});
这样做可以让用户执行browser.***('arg1', 'arg2')
,这会在***
分支上调用chrome
。
然而,***
分支上的chrome
部分接受回调的最终参数。如果是这样,用户会添加.then
,这样他们就可以 - browser.***('arg1', 'arg2').then(.....)
。如果用户执行了.then
,我需要检测/拦截。这可能吗?
我的另一个选择是硬编码哪个chrome.***
接受回调,但这不是安全的方式,因为chrome.***
API总是在不断发展。