Jak czekać na wartość zwrotną wywołania zwrotnego metody asynchronicznej?

Wiem, że oczekiwanie na metodę asynchroniczną jest głupie,zamiast tego należy używać wywołań zwrotnych. Ale co, jeśli interfejs API innej firmy wymusza synchronizację?

Opracowuję rozszerzenie Chrome, które uniemożliwia użytkownikowi odwiedzanie witryn, które są już otwarte w innej karcie. Zasadniczo muszę anulować żądania na podstawie adresów URL w otwartych kartach. Chcę użyćchrome.webRequest.onBeforeRequest lubię to:

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']);

Mam nadzieję, że zobaczysz mój dylemat w powyższym kodzie. Muszę zwrócić obiekt na podstawie wyników asynchronicznych wywołań metod. Czy to możliwe, aby to osiągnąć?

questionAnswers(1)

yourAnswerToTheQuestion