Javascript "если" утверждение не удалось - PullRequest
0 голосов
/ 09 ноября 2011

У меня в настоящее время довольно затруднительное положение.Написанное мною утверждение if, которое оценивается как true, не выполняется.Выполнение продолжается в остальном.Я включу часть кода в надежде, что это поможет определить, что происходит.

Я создаю расширение Google Chrome, и мой popup.html делает запрос к моему скрипту контента,который возвращает некоторые значения.После этого я использую полученные переменные для выполнения логики оператора if.

var timer;    
var status;                
chrome.tabs.getSelected(null, function(tab)
{
    chrome.tabs.sendRequest(tab.id, {method : 'GetTimer'}, 
    function(response)
    {
        timer = response.Timer;
    });

    chrome.tabs.sendRequest(tab.id, {method : 'GetStatus'}, 
    function(response)
    {
        status = response.Status;
    });
});

// here is where the issue is occuring
if (status && status === bg.StopText)
{
}

Когда я ставлю точку останова на самом операторе if, я вижу, что состояние равно «Stop», и bg.StopText такжеравно «Стоп».Кроме того, когда я копирую

status && status === bg.StopText

в свою консоль и выполняю ее, результат будет true.

Может кто-нибудь увидеть, есть ли проблема, которую я закрываю, и, возможно,какие шаги я мог бы предпринять, чтобы устранить эту проблему дальше?

Ответы [ 2 ]

4 голосов
/ 09 ноября 2011

У вас есть состояние гонки. Если вы отправляете запрос, вы не можете проверить статус, пока запрос не вернется, он асинхронный. Когда вы приостанавливаете выполнение, это дает время для завершения асинхронного вызова и выглядит так, как будто у вас уже есть значение.

1 голос
/ 09 ноября 2011

Является ли chrome.tabs.getSelected синхронным или асинхронным?Если он асинхронный, то он, вероятно, завершается, пока вы останавливаете сценарий на точке останова.

Попробуйте добавить console.log(status+' '+bg.StopText); перед if и посмотрите, что это отобразит.

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