Pertanyaan Gaya JavaScript: callback opsional


Saya memiliki beberapa fungsi yang saya ingin kadang-kadang menjalankan panggilan balik tetapi tidak selalu, apakah memeriksa apakah callback didefinisikan / berfungsi dengan baik atau ada cara yang lebih baik?

contoh:

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

76
2017-07-22 15:56


asal


Jawaban:


Saya pribadi lebih suka

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

Itu typeof Namun perintahnya cukup bodoh dan seharusnya hanya digunakan untuk itu "undefined" dan "function"

Masalah dengan typeof !== undefined adalah bahwa pengguna mungkin lulus dalam nilai yang ditentukan dan bukan sebuah fungsi


113
2017-07-22 15:58



Anda juga bisa melakukan:

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

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

Ini sangat berguna jika Anda kebetulan menggunakan callback di beberapa tempat.

Selain itu jika Anda menggunakan jQuery, Anda sudah memiliki fungsi seperti itu, namanya $ .noop


41
2017-07-22 15:59



Cukup lakukan

if (callback) callback();

Saya lebih suka memanggil callback jika disediakan, tidak peduli apa pun jenisnya. Jangan biarkan gagal secara diam-diam, sehingga implementor tahu dia lulus dalam argumen yang salah dan dapat memperbaikinya.


27
2018-03-31 11:16



Menambah apa yang dikatakan Pablo, pada ECMAScript terbaru ini valid:

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

Harap dicatat bahwa pengguna dapat mengirimkan sesuatu yang lain dari fungsi dan akan merusaknya.


2
2017-12-20 13:20



Jika kriteria untuk menjalankan panggilan balik adalah apakah itu ditentukan atau tidak, maka Anda baik-baik saja. Juga, saya sarankan untuk memeriksa apakah itu benar-benar berfungsi sebagai tambahan.


0
2017-07-22 15:59



Saya sangat lelah melihat potongan yang sama berulang kali saya menulis ini:

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

Saya punya ratusan fungsi melakukan hal-hal seperti

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

atau terserah...

Saya skeptis terhadap keseluruhan strategi "pastikan itu berfungsi". Satu-satunya nilai yang sah adalah fungsi atau falsy. Jika seseorang memberikan angka bukan nol atau string yang tidak kosong, apa yang akan Anda lakukan? Bagaimana cara mengabaikan masalah memecahkannya?


0
2017-07-22 16:24



Saya telah bersungguh-sungguh pindah ke kopi-skrip dan menemukan argumen default adalah cara yang bagus untuk memecahkan masalah ini

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

0
2018-03-14 13:19



Ini bisa dilakukan dengan mudah ArgueJS:

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

0
2018-04-12 16:41



Fungsi yang valid didasarkan pada prototipe Fungsi, gunakan:

if (callback instanceof Function)

untuk memastikan callback adalah fungsi


0
2017-12-26 18:36