Ungeprüft Laufzeit.lastError bei der Verwendung von Chrome-API
Benutze ich chrome.fileSystem
- API in meiner Anwendung um eine Datei zu öffnen. Wenn ich auf die Cancel
- Schaltfläche des Datei-Auswahl-dialog, tritt ein Fehler auf:
Deaktiviert
runtime.lastError
während der AusführungfileSystem.chooseEntry
: Benutzer abgebrochen
Wie Sie dieses Problem beheben Fehler?
- wahrscheinlich sollte man mit TRY ... CATCH-block.
- Nicht helfen in diesem Fall.
- So können Sie vielleicht geben Sie uns den code, den Sie verwenden, um chrome.Dateisystem dann?
- Siehe meine Antwort auf die Frage, warum
try ... catch
können nicht fangen. - danke!!! Ihre Antwort ist sehr hilfreich ~
- Sie nicht, lösen Sie es mit einem trycatch, aber durch das Lesen von der Rückruf. Siehe stackoverflow.com/a/45603880/632951 für die Lösung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser Fehler ist in diesem Fall nicht wichtig, aber ich werde es erklären und wie man es loswerden.
Was ist dieser Fehler?
Chrome-APIs sind meist asynchron: Sie haben einen Rückruf, der aufgerufen wird, wenn der Vorgang abgeschlossen ist.
Im Falle von
chrome.fileSystem.chooseEntry
, den gewählten Eintrag (oder Einträge) weitergeleitet, um einen Rückruf:Aber die API ist nicht garantiert zu werden, liefern Sie ein Ergebnis. Zum Beispiel, wie in Ihrem Fall, der Benutzer kann sich weigern, den Zugang bereitzustellen, indem Sie auf "Abbrechen". Dann gibt es keinen Eintrag, mit zu arbeiten, und möchten Sie vielleicht einige Erklärung, warum das passiert ist. Wie, um einen Fehler auszulösen, ohne umweltschädliche alle Rückrufe mit einen zusätzlichen "Fehler" - argument?
In der Regel, Chrom Angebote mit, indem Sie eine Globale variable,
chrome.runtime.lastError
zum Zeitpunkt der callback wird aufgerufen. Es ist einheitlich Chrome async APIs zu verwenden, anstatt ein argument error. In der Tat, unter Angabe derchrome.fileSystem
docs:undefined
.chrome.runtime.lastError.message
erklären, was falsch ist.Jedoch einige Rückrufe nicht prüfen, ob die Fehler-variable. Dies deutet möglicherweise auf einen Fehler bei der Programmierung, und Chrom Hinzugefügt, die überprüft, dass
chrome.runtime.lastError
tatsächlich geprüft (evaluiert) in einem callback. Wenn nicht, es hält dies für eine nicht behandelte Ausnahme, und wirft diesen Fehler.Warum ich sagen, es ist nicht wichtig?
Während es ein Fehler, es wird nicht brechen Sie die Ausführung Ihres Programms ("geworfen, die am Ende einer async-task) und wird nicht wirklich angezeigt werden, um Ihre Benutzer.
Und während ich sagen, es ist nicht wichtig, Sie sollten überprüfen Sie die Programm-Logik. Es kann oder kann nicht ganz richtig sein - dies ist beabsichtigt, eine (stern -) Warnung.
Warum gibt es ihn?
Warnen, Sie, die Entwickler, die Ihren code wahrscheinlich versucht, ein Ergebnis, das nicht vorhanden ist, weil etwas schief ging.
Ist es möglich, Sie bereits die Prüfung für einen Fehler, z.B.
Chrome nicht beschäftigen, komplexe Heuristiken, um zu sehen, wenn Ihr code erwartet diese Möglichkeit. Wie bereits erwähnt, Fehler werden gemeldet via
chrome.runtime.lastError
, und Sie erwartet, dass es zu kontrollieren.Beachten Sie, dass dieser Fehler nur ausgelöst wird, wenn etwas schlimmes hat auftreten, und nicht, wenn der API-Aufruf beendet normalerweise.
Kann ich es fangen?
Nicht wirklich; es ist nicht angehoben, durch Ihren code, aber der cleanup-code, der verarbeitet asynchrone Aufgaben in Chrom-API; daher kann die Verwendung von
try ... catch
in Ihren Rückruf nicht helfen. Da es asynchron, mittry
um die original-API-Aufruf wird nicht helfen, entweder.Was zu tun?
Sollten Sie Logik, um Ihren Rückruf, der überprüft, ob Probleme den Weg Chrome erwartet, und wahrscheinlich darauf reagieren.
Solange Chrome sieht, dass Sie überprüft Sie den Wert, wenn ein Fehler vorliegt (das ist, bewertet es, Sie innerhalb deiner callback), wird der Fehler nicht geworfen werden.
chrome.runtime.lastError
statt mit einer error-argument für jeden Rückruf. Warum ist das so? Würde nicht geben jeder callback-seine eigenen Fehler argument sein viel Reiniger?window.onerror
handler. Was ich sagen kann, wird ein Laufzeitfehler wird nicht ausgelöst eine Globale error-handler, aber ich würde gerne als falsch erwiesen.Spät zur party, aber hier ist, wie ich unterdrückt den Fehler in einem
chrome.windows.remove()
nennen, falls es hilft jemand anderes. StattIch verwendet
void
wertet seine Operanden und gibt dannundefined
. Ich denke, dass dieser code ziemlich effektiv Dokumente, die sein Zweck ist es, Fehler ignorieren 🙂 .Für Kürze
ignore_error()
gezogen werden könnte, der aus diesem Aufruf und für mehrerechrome
API-Aufrufe, oder den Namenignore_error
weggelassen werden.Update In ES6, können Sie die kürzere Pfeil-Funktion syntax:
Getestet in Chrome 64
chrome.windows
nicht vorhanden ist, geben Sie die Fehlermeldung, die Sie sah.Für diese Art von Fehler
try catch
wird nicht hilfreich sein. Stattdessen können Sie den Zugriff auf die Globale variablechrome.runtime.lastError
wie @xan erwähnt in seiner Antwort genial oben(durch die Art und Weise sollten Sie es Lesen und upvote es!).Nun, hier habe ich ein Beispiel geben, die verwendet werden können: