Как я могу сделать обратный вызов в chrome.windows.getAll () асинхронным? - PullRequest
0 голосов
/ 08 апреля 2019

Быстрый вопрос, я надеюсь.Я играл с chrome.windows.getAll(), который принимает объект и функцию обратного вызова.В конце концов я получаю необходимые данные из метода, но мне нужно запустить этот метод асинхронно, чтобы данные возвращались до того, как я верну из него то, что мне нужно.Если я регистрирую его на консоли, я вижу пустой массив, но если развернут, данные отображаются.Я полагаю, что это возможные данные, но мое приложение никогда их не увидит.

Я использовал async / await по всему приложению без проблем, но я чувствую, что чего-то здесь не хватает.Кажется, я не могу использовать то, что знаю, для создания асинхронного процесса.

  async function getURLs() {
    let tabs = []

    function getAllOpenWindows(winData) {
      let winTabs = winData[0].tabs

      for (let i = 0; i < winTabs.length; i++) {
        tabs.push(winTabs[i].url)
      }
    }

    try {
      await chrome.windows.getAll({ populate: true }, getAllOpenWindows)

      console.log(tabs)
      return tabs
    } catch (error) {
      return null
    }
  }

  function sessionToState(session) {
    for (let i = 0; i < session.length; i++) {
      dispatch({ type: 'add', value: session[i] })
    }
  }

  return (
    <div>
      <form
        method="post"
        onSubmit={async e => {
          e.preventDefault()

          const session = await getURLs()

          sessionToState(session)

          createGroup()

В приведенном выше фрагменте кода я пытался использовать async / await, но я не верю, что chrome.windows.getAllвозвращает обещание (может быть, ничего не возвращает?), поэтому оно не будет работать.Мне интересно, какой подход я должен использовать, потому что я был в тупике уже много часов.Если вам понадобится еще какая-то часть файла или дополнительная информация, не стесняйтесь спрашивать.Спасибо.

...