Décochée de l'exécution.lastError lors de l'utilisation de l'API google Chrome
- Je utiliser chrome.fileSystem
API dans mon application pour ouvrir un fichier. Quand je clique sur le Cancel
bouton du sélecteur de fichier boîte de dialogue, une erreur se produit:
Décoché
runtime.lastError
lors de l'exécution defileSystem.chooseEntry
: l'Utilisateur a annulé l'
Comment corriger cette erreur?
- vous devriez probablement utiliser bloc TRY ... CATCH.
- Ne les aidera pas dans ce cas.
- Alors peut-être vous pouvez nous donner le code que vous utilisez autour de chrome.système de fichiers, alors?
- Voir ma réponse à pourquoi
try ... catch
ne peux pas l'attraper. - merci!!!! Votre réponse est très utile ~
- Vous n'avez pas le résoudre avec une trycatch, mais par la lecture à partir de la fonction de rappel. Voir stackoverflow.com/a/45603880/632951 pour la solution.
Vous devez vous connecter pour publier un commentaire.
Cette erreur n'est pas important dans ce cas, mais je vais l'expliquer et comment s'en débarrasser.
Quelle est cette erreur?
Chrome Api sont principalement asynchrone: vous avez une fonction de callback qui est appelée lorsque l'opération est terminée.
En cas de
chrome.fileSystem.chooseEntry
, l'entrée choisie (ou entrées) seront transmises à un rappel:Toutefois, l'API n'est pas garanti pour produire un résultat. Par exemple, comme dans votre cas, l'utilisateur peut refuser de donner accès en cliquant sur "Annuler". Ensuite, il n'y a pas d'accès à travailler avec, et vous pourriez voulez quelques explications sur la raison qui s'est passé. Comment élever une erreur sans polluer tous les rappels avec un supplément de "erreur" argument?
Généralement, Chrome traite de ce problème en définissant une variable globale,
chrome.runtime.lastError
, à la fois la fonction de rappel est appelée. Il est uniforme dans Chrome Api asynchrones pour l'utilisation de ce au lieu d'une erreur d'argument. En fait, en citant lechrome.fileSystem
docs:undefined
.chrome.runtime.lastError.message
va expliquer quel est le problème.Cependant, quelques rappels ne vérifie pas cette erreur variable. Cela peut indiquer une erreur de programmation, et de Chrome ajouté vérifie que
chrome.runtime.lastError
est effectivement vérifié (évalué) dans un rappel. Si non, il estime que c'est une exception non gérée, et génère cette erreur.Pourquoi je dis que c'est pas important?
Alors que c'est une erreur, il ne cassera pas l'exécution de votre programme (il est lancé à la fin d'une tâche asynchrone), et ne sera pas vraiment affichés à vos utilisateurs.
Et alors que je dis que c'est pas important, vous devez vérifier que vous logique du programme. Il peut ou peut ne pas être tout droit - ce qui est destiné à être un (stern) avertissement.
Pourquoi existe-t-elle?
Pour l'avertir, vous, le développeur, que votre code probablement essaie de l'utiliser pour un résultat qui n'existe pas, parce que quelque chose s'est mal passé.
Il est possible que vous êtes déjà de vérifier qu'une erreur, par exemple
Chrome n'emploie pas de complexe heuristiques pour voir si votre code prévoit cette possibilité. Comme indiqué, les erreurs sont signalées par
chrome.runtime.lastError
, et vous êtes tenus de vérifier.Noter que cette erreur n'est soulevé quand quelque chose de mauvais ne se produire, et non pas lors de l'appel d'API termine normalement.
Puis-je rattraper?
Pas vraiment; ce n'est pas soulevée par votre code, mais le code de nettoyage qui gère les tâches asynchrones en Chrome de l'API; par conséquent l'utilisation de
try ... catch
dans votre rappel ne va pas aider. Depuis, il est asynchrone, à l'aide detry
autour de l'origine de l'appel API ne va pas aider non plus.Quoi faire avec elle?
Vous devez ajouter de la logique de votre rappel qui vérifie les problèmes de la façon Chrome n'attend que ça, et probablement de réagir.
Tant que Chrome voit que vous vérifié la valeur quand il ya une erreur (qui est, évalué au sein de de votre de rappel), l'erreur ne sera pas levée.
chrome.runtime.lastError
au lieu d'utiliser une erreur d'argument pour chaque rappel. Pourquoi donc? Ne pas donner à chaque rappel de sa propre erreur argument, beaucoup plus propre?window.onerror
gestionnaire. À partir de ce que je peux dire, une erreur d'exécution ne donne pas lieu à un gestionnaire d'erreurs globales, mais je serais heureux d'avoir tort.La fin de la partie, mais voici comment j'ai supprimé le message d'erreur à
chrome.windows.remove()
appel, dans le cas où il aide à quelqu'un d'autre. Au lieu deJ'ai utilisé
void
évalue son opérande, puis retourneundefined
. Je pense que ce code assez efficacement les documents que son objectif est d'ignorer les erreurs 🙂 .Pour des raisons de concision,
ignore_error()
pourrait être tirée de cet appel et utilisé pour de multipleschrome
les appels d'API ou le nomignore_error
peut être omis.Mise à jour Dans l'ES6, vous pouvez utiliser la plus courte la flèche de la fonction syntaxe:
Testé dans Chrome 64
chrome.windows
n'existe pas, vous donnant l'erreur que vous avez vu.Pour ce type d'erreurs
try catch
ne sera pas utile. Au lieu de cela, vous pouvez accéder à la variable globalechrome.runtime.lastError
comme @xan a mentionné dans son génial réponse ci-dessus(par la façon dont vous devriez le lire et upvote il!).Maintenant, ici, je fournir un exemple qui peut être utilisé: