2011-11-09 9 views
0

J'ai actuellement tout à fait la situation. Une instruction if que j'ai écrite - qui vaut true - n'est pas en cours d'exécution. L'exécution continue à l'autre. Je vais inclure une partie du code dans l'espoir que cela aidera à déterminer ce qui se passe.Javascript "si" déclaration échouant

Je construis une extension google chrome, et mon popup.html fait une demande à mon script de contenu, qui renvoie des valeurs. Après cela, j'utilise les variables obtenues pour exécuter la logique d'instruction 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) 
{ 
} 

Quand je le point d'arrêt si la déclaration elle-même, je peux voir que le statut est égal à « Stop », et bg.StopText est aussi égal à « Stop ». De plus, quand je copie

status && status === bg.StopText 

dans ma console et l'exécuter, le résultat est true.

Quelqu'un peut-il voir s'il y a un problème que je glisse sur, et peut-être quelques mesures que je pourrais prendre pour résoudre ce problème?

Répondre

4

Vous avez une situation de concurrence. Si vous envoyez une requête, vous ne pouvez pas vérifier le statut tant que la demande n'est pas retournée, elle est asynchrone. Lorsque vous interrompez l'exécution, l'appel asynchrone est terminé et vous avez déjà une valeur.

1

Est-ce que chrome.tabs.getSelected est synchrone ou asynchrone? Si c'est asynchrone, alors c'est probablement terminé lorsque vous avez mis le script en pause au point d'arrêt.

Essayez d'ajouter console.log(status+' '+bg.StopText); avant le if et voyez ce que cela affiche.