非同期メソッドを待つのはばかげていることはわかっています。代わりにコールバックを使用する必要があります。しかし、サード パーティの API によって同期が強制された場合はどうなるでしょうか。
ユーザーが別のタブで既に開いている Web サイトにアクセスできないようにする 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']);
上記のコードで私のジレンマを理解していただければ幸いです。非同期メソッド呼び出しの結果に基づいてオブジェクトを返す必要があります。これを達成することは可能ですか?