Pregunta Estilo de JavaScript: devoluciones de llamada opcionales


Tengo algunas funciones en las que querré ejecutar una devolución de llamada de vez en cuando, pero no siempre, ¿está comprobando si la devolución de llamada está definida / funciona con un buen estilo o hay una forma mejor?

ejemplo:

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

76
2017-07-22 15:56


origen


Respuestas:


Yo personalmente prefiero

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

los typeof Sin embargo, el comando es dudoso y solo debe usarse para "undefined" y "function"

Los problemas con el typeof !== undefined es que el usuario puede pasar un valor que está definido y no es una función


113
2017-07-22 15:58



También puedes hacer:

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

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

Es especialmente útil si usa el callback en algunos lugares.

Además, si estás usando jQuery, ya tienes una función así, se llama $ .noop


41
2017-07-22 15:59



Simplemente hazlo

if (callback) callback();

Prefiero llamar a la devolución de llamada si se proporciona, sin importar de qué tipo sea. No permita que falle silenciosamente, por lo que el implementador sabe que aprobó un argumento incorrecto y puede solucionarlo.


27
2018-03-31 11:16



Agregando a lo que Pablo dijo, en el último ECMAScript esto es válido:

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

Tenga en cuenta que un usuario puede pasar algo más que una función y lo romperá.


2
2017-12-20 13:20



Si el criterio para ejecutar la devolución de llamada es que esté definido o no, está bien. Además, sugiero que verifique si realmente es una función adicional.


0
2017-07-22 15:59



Me cansé tanto de ver ese mismo fragmento una y otra vez. Escribí esto:

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

Tengo cientos de funciones haciendo cosas como

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

o lo que sea...

Soy escéptico de toda la estrategia de "asegurarme de que funcione". Los únicos valores legítimos son una función o falsy. Si alguien pasa un número distinto de cero o una cadena no vacía, ¿qué vas a hacer? ¿Cómo se puede ignorar el problema?


0
2017-07-22 16:24



Me he sincedido movido a coffee-script y encontré argumentos por defecto es una buena manera de resolver este problema

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

0
2018-03-14 13:19



Fácilmente se puede hacer con ArgueJS:

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

0
2018-04-12 16:41



Una función válida se basa en el prototipo de Función, use:

if (callback instanceof Function)

para asegurarse de que la devolución de llamada es una función


0
2017-12-26 18:36