Maison >interface Web >js tutoriel >Pourquoi mes résultats `chrome.tabs.query()` sont-ils inaccessibles ?

Pourquoi mes résultats `chrome.tabs.query()` sont-ils inaccessibles ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-31 12:36:02304parcourir

Why Are My `chrome.tabs.query()` Results Inaccessible?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn