Maison >interface Web >js tutoriel >Pourquoi mes résultats `chrome.tabs.query()` sont-ils inaccessibles ?
Après l'appel de chrome.tabs.query, les résultats semblent inaccessibles
Lors de la tentative d'accès aux résultats de chrome.tabs.query() , les développeurs peuvent rencontrer un comportement inattendu où les résultats semblent indisponibles. Ce problème provient de la nature asynchrone de la requête.
Dans la programmation asynchrone, les fonctions fonctionnent en dehors du thread principal d'exécution. Ainsi, la boucle principale peut continuer à exécuter du code pendant que la fonction asynchrone est toujours en cours d'exécution.
Pour illustrer cela, considérons l'exemple suivant :
var fourmTabs = new Array(); chrome.tabs.query({}, function (tabs) { for (var i = 0; i < tabs.length; i++) { fourmTabs[i] = tabs[i]; } }); for (var i = 0; i < fourmTabs.length; i++) { if (fourmTabs[i] != null) window.console.log(fourmTabs[i].url); else { window.console.log("??" + i); } }
Dans ce cas, la boucle for suivant la La requête s'exécutera avant que la fonction de rappel affectée à tabs.query n'ait terminé son exécution. Par conséquent, les résultats de la requête ne sont pas encore disponibles dans la boucle.
Pour résoudre ce problème, le code qui s'appuie sur les résultats de la requête doit être placé dans la fonction de rappel. Par exemple :
var fourmTabs = new Array(); chrome.tabs.query({}, function (tabs) { for (var i = 0; i < tabs.length; i++) { fourmTabs[i] = tabs[i]; } // Code relying on the query results here });
En déplaçant le code qui utilise les résultats de la requête dans la fonction de rappel, nous garantissons qu'il ne s'exécutera qu'une fois les résultats disponibles, éliminant ainsi le problème.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!