Frage JavaScript Style: optionale Callbacks


Ich habe einige Funktionen, bei denen ich gelegentlich einen Callback ausführen möchte, aber nicht immer, prüft ob der Callback definiert ist / funktioniert ein guter Style oder gibt es einen besseren Weg?

Beispiel:

function save (callback){
.....do stuff......
   if(typeof callback !== 'undefined'){
     callback();
   };
};

76
2017-07-22 15:56


Ursprung


Antworten:


Ich persönlich bevorzuge es

typeof callback === 'function' && callback();

Das typeof Befehl ist jedoch zwielichtig und sollte nur für verwendet werden "undefined" und "function"

Die Probleme mit dem typeof !== undefined ist, dass der Benutzer einen definierten Wert übergeben kann keine Funktion


113
2017-07-22 15:58



Sie können auch Folgendes tun:

var noop = function(){}; // do nothing.

function save (callback){
   callback = callback || noop;
   .....do stuff......
};

Es ist besonders nützlich, wenn Sie das verwenden callback an einigen Stellen.

Zusätzlich wenn Sie verwenden jQuery, Sie haben bereits eine Funktion, so heißt es $ .noop


41
2017-07-22 15:59



Einfach tun

if (callback) callback();

Ich rufe lieber den Callback zurück, wenn er mitgeliefert wird, egal um welchen Typ es sich handelt. Lass es nicht im Stillen ablaufen, daher weiß der Implementierer, dass er ein falsches Argument übergeben hat und es beheben kann.


27
2018-03-31 11:16



Zusätzlich zu dem, was Pablo gesagt hat, gilt dies für das neueste ECMAScript:

// @param callback Default value is a noop fn.
const wow = (callback = ()=>{}) => {
   callback();
};

Bitte beachten Sie, dass ein Benutzer etwas anderes als eine Funktion übergeben kann und es bricht.


2
2017-12-20 13:20



Wenn die Kriterien für das Ausführen des Rückrufs darin bestehen, ob es definiert ist oder nicht, dann geht es Ihnen gut. Außerdem schlage ich vor zu prüfen, ob es wirklich eine Funktion dazu gibt.


0
2017-07-22 15:59



Ich habe es satt, immer wieder denselben Ausschnitt zu sehen. Ich schrieb dies:

  var cb = function(g) {
    if (g) {
      var args = Array.prototype.slice.call(arguments); 
      args.shift(); 
      g.apply(null, args); 
    }
  };

Ich habe Hunderte von Funktionen, die Dinge wie machen

  cb(callback, { error : null }, [0, 3, 5], true);

oder Wasauchimmer...

Ich bin skeptisch gegenüber der ganzen Strategie "Sicherstellen, dass es funktioniert". Die einzigen legitimen Werte sind eine Funktion oder eine Falsy. Wenn jemand eine von Null verschiedene Zahl oder eine nicht leere Zeichenfolge übergibt, was werden Sie tun? Wie löst das Ignorieren des Problems es?


0
2017-07-22 16:24



Ich habe sinced zu coffee-script bewegt und gefundene Standardargumente ist ein guter Weg, um dieses Problem zu lösen

doSomething = (arg1, arg2, callback = ()->)->
    callback()

0
2018-03-14 13:19



Es kann leicht gemacht werden mit Argumentieren:

function save (){
  arguments = __({callback: [Function]})
.....do stuff......
  if(arguments.callback){
    callback();
  };
};

0
2018-04-12 16:41



Eine gültige Funktion basiert auf dem Funktionsprototyp, verwende:

if (callback instanceof Function)

um sicher zu sein, dass der Rückruf eine Funktion ist


0
2017-12-26 18:36