Что происходит в этом JavaScript, и как я могу это исправить? - PullRequest
0 голосов
/ 24 августа 2011

У меня есть расширение chrome с файлом javascript, который исполняется. Файл javascript делает этот вызов background.html:

action.js

var action = "";
chrome.extension.sendRequest({method: "getLocalStorage", key: "action"},
  function(response) {
     alert(response.data);
     action = response.data;
 });
alert('action:'+action);

и background.html:

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
if (request.method == "getLocalStorage")
  sendResponse({data: localStorage[request.key]});
else
  sendResponse({});

Поведение, которое я получаю, это окно с предупреждением «action:», а затем окно с сообщением «video», которое является правильным значением для действия.

Почему эти окна оповещений отображаются не по порядку, и почему переменная action не получает значение response.data? Связано ли это с задержкой метода sendRequest? Как я могу заставить скрипт ждать, чтобы я мог получить значение? (Мне нужно сделать этот запрос несколько раз - у меня есть 4 значения, которые мне нужно запросить)

1 Ответ

3 голосов
/ 24 августа 2011

Полагаю, sendRequest - это асинхронный метод (очень похожий на Ajax-вызов). Скрипт не останавливается и ждет ответа.

Единственное решение состоит в том, чтобы вызывать другие функции, которые нуждаются в ответе внутри обратного вызова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...