Es ist üblich, Argumente zu validieren und Fehler in Funktionen zurückzugeben.JavaScript Callback Fehlerbehandlung
jedoch in JavaScript Callback-Funktion, wie zum Beispiel:
function myFunction(num, callback) {
if (typeof num !== 'number') return callback(new Error('invalid num'))
// do something else asynchronously and callback(null, result)
}
schrieb ich eine Menge von Funktionen wie diese, aber ich frage mich, ob es etwas potenziell schädlich. Da der Aufrufer in den meisten Fällen davon ausgeht, dass es sich um eine asynchrone Funktion handelt, wird der Rückruf nach dem Code direkt nach dem Funktionsaufruf ausgeführt. Wenn jedoch einige Argumente ungültig sind, ruft die Funktion sofort den Callback auf. Der Aufrufer muss also vorsichtig mit der Situation umgehen, dh mit einer unerwarteten Ausführungssequenz.
Ich möchte einige Hinweise zu diesem Thema hören. Sollte ich vorsichtig annehmen, dass alle asynchronen Rückrufe sofort ausgeführt werden können? Oder ich sollte etwas wie setTimeout (..., 0) verwenden, um synchrone Dinge in asynchrone umzuwandeln. Oder es gibt eine bessere Lösung, die ich nicht kenne. Vielen Dank.
Ich habe meinen Downvote entfernt. Ich schätze, dass die Validierung der Art, wie die Funktion aufgerufen wird, schwerwiegend genug ist, um geworfen zu werden und in der Produktion sowieso nicht passieren sollte. –
@PatrickRoberts: Ich habe diesen Teil der Antwort entfernt, es war nicht wirklich relevant für die Frage. Ich kann Ihren Standpunkt sehen, obwohl ich (noch) nicht damit einverstanden bin; Ich muss eher darüber nachdenken. Ich bemerke, dass, wenn Sie während des Setups eines ES2015-Versprechens werfen ('let p = neues Versprechen (resolve => {new error();})'), wird es in eine Ablehnung durch den Promise-Konstruktor konvertiert, der Ihre unterstützt Argument für einen einzigen Fehler Kanal angesichts der Gedanken und Erfahrungen, die in das Design dieser API ging ... –
Mein Ansatz ist auch nicht korrekt. Wie der Kommentator auf mich hingewiesen hat, ist das Callstack etwas sehr Wichtiges zu beachten, besonders wenn ein Entwickler, der Ihre Funktion verwendet, versucht, unbegrenzt zu wiederholen, was letztendlich zu einem Stackoverflow führt, wenn Ihre Funktion synchron ist, wenn sie fehlerhaft ist. –