我知道等待异步方法是愚蠢的,应该使用回调来代替。但是,如果第三方 API 强制您进行同步怎么办?
我正在开发一个 Chrome 扩展程序,它将阻止用户访问已经在另一个选项卡中打开的网站。我基本上需要根据打开的标签中的 url 取消请求。我想这样使用chrome.webRequest.onBeforeRequest
:
function onBeforeRequest(details) {
var websiteAlreadyOpenInOtherTab;
// Here i want to set `websiteAlreadyOpenInOtherTab` by using the `chrome.tabs`
// API. It's asynchronous though and that's my problem. I cant return a value
// from an asynchronous method call.
if (websiteAlreadyOpenInOtherTab) {
return { cancel: true };
}
}
chrome.webRequest.onBeforeRequest.addListener(
onBeforeRequest,
{ urls: ['<all_urls>'], types: ['main_frame'] },
['blocking']);
希望您在上面的代码中看到我的困境。我需要根据异步方法调用的结果返回一个对象。有可能实现这一目标吗?