Untuk apa Angular.noop digunakan?


86

Saya telah mencoba mencarinya di mana-mana bahkan di dokumentasi Angular.org tetapi tidak dapat menemukan penjelasan rinci tentang penerapannya. Akan sangat membantu jika ada yang bisa menjelaskannya.


itu hanya fungsi kosong yang tidak melakukan apa
doodeec

1
Sebanyak itu saya sudah dapatkan. Tapi kenapa kita menggunakannya seperti ini? "sukses = sukses || angular.noop;"
Harsh

1
sepertinya @lechariotdor mendapatkan jawaban yang lebih baik ... Anda dapat mengalihkan penerimaan Anda sehingga pengunjung halaman ini lebih cepat diarahkan ke jawaban terbaik
sfletche

Jawaban:


148

angular.noop adalah fungsi kosong yang dapat digunakan sebagai placeholder saat Anda perlu meneruskan beberapa fungsi sebagai param.

function foo (callback) {
    // Do a lot of complex things

    callback();
}

// Those two have the same effect, but the later is more elegant
foo(function() {});
foo(angular.noop);

1
Apa manfaat menelepon noopdaripada membiarkan fungsinya kosong? Estetika, kinerja, atau yang lainnya?
abyrne85

4
@ abyrne85 Lebih menyenangkan secara estetika dan merupakan praktik yang baik untuk digunakan angular.noopkarena Anda selalu menggunakan kembali fungsi kosong yang sama (alih-alih mendeklarasikan fungsi anonim baru setiap saat). Dari segi kinerja, tidak ada bedanya karena kode untuk angular.noophanyalah fungsi kosong bernama noop.
tomaoq

Menggunakan angular.noop menciptakan kopling yang kuat dengan objek bersudut. Saya lebih suka menggunakan fungsi anonim sebaris bila diperlukan.
John Smith

Terima kasih banyak :) Bisakah Anda menjelaskan apa itu $ timeout (angular.noop)?
artgb

27

Saya merasa sangat membantu saat menulis fungsi yang mengharapkan panggilan balik.

Contoh:

function myFunction(id, value, callback) {

    // some logic
    return callback(someData);
}

Fungsi di atas akan mengembalikan kesalahan, ketika dipanggil tanpa menentukan argumen ketiga. myFunction(1, 'a');

Contoh (menggunakan angular.noop):

function myFunction(id, value, callback) {

    var cb = callback || angular.noop; // if no `callback` provided, don't break :)
    // some logic
    return cb(someData);
}

4
Atau Anda memiliki satu-kapal untuk itu: typeof callback === 'function' && callback();. Jauh lebih berkelas ^^. Tidak menggunakan angular.noop.
Freezystem

16

Ini adalah fungsi yang tidak melakukan operasi. Ini berguna dalam situasi seperti ini:

function foo(y) {
   var x= fn();
   (y|| angular.noop)(x);
 }

Berguna saat menulis kode dalam gaya fungsional


2
Baik. Oke, terima kasih. Tapi hanya sedikit pertanyaan yang mengapa kita tidak bisa melakukan "(y) (x)" daripada "(y || angular.noop) (x);"? apa alasan dibalik ini?
Harsh

3
@AngularHarsh: - Anda boleh menulisnya. Mungkin contoh ini akan membantu: - //do nothing on the success callback, hence replacing the success callbck function with angular.noop() $ scope.contacts = Contacts.query (angular.noop, function (response) {Window.myresp = response; $ scope.displayError (response); console.log ("bad boy, listContacts gagal ");});
Rahul Tripathi

Saya pikir saya mengerti sekarang. Jadi yang kami lakukan di sini adalah displayError dipicu saat gagal tetapi tidak terjadi apa-apa saat berhasil (seperti yang disarankan).
Harsh

5

* Jawaban ini mengasumsikan bahwa Anda bukan pemula dalam bidang sudut

Angular.noop adalah fungsi kosong yang dapat digunakan sebagai placeholder dalam beberapa kasus

sebagai contoh:

Bayangkan Anda menggunakan q.all yang melakukan beberapa panggilan ke api dan mengembalikan satu janji. Jika beberapa dari panggilan ini gagal tetapi Anda masih perlu menangani panggilan yang tidak gagal, gunakan noop sudut sebagai callback ke panggilan api saat Anda menangkap panggilan. Jika Anda tidak menggunakan sudut noop, q.all akan menolak semuanya jika satu panggilan gagal.

Q.all (somecall.catch (angular.noop), anothercall). Kemudian (selesaikan hasil [0] dan hasil [1])

Jika panggilan gagal, Angular akan mengabaikannya dan melakukan panggilan lain (tetapi Anda masih belum ditentukan untuk hasil penyelesaian pertama)

Saya harap saya membantu


1
Saya tidak memilih karena jawaban Anda secara tata bahasa dan formal salah sehingga saya tidak bisa mendapatkan informasi yang dapat dipercaya darinya.
Edoardoo

4
var result = (callback || angular.noop)(params)

Ini cara terpendek untuk dilakukan

var result = typeof callback === 'function' && callback(params);

Memperhatikan bahwa callback var akan menjadi sebuah fungsi


ini elegan
Faiz Mohamed Haneef

2

Jika Anda ingin dokumentasi resmi di sini adalah tautannya . Ini sangat sederhana. Saya juga telah menempelkan dokumentasi saat ini dari tautan.


Fungsi yang tidak melakukan operasi. Fungsi ini bisa berguna saat menulis kode dalam gaya fungsional.

function foo(callback) {
  var result = calculateResult();
  (callback || angular.noop)(result);
}


0

Trik: Anda juga dapat menggunakannya untuk menambahkan terner ke ng-clickatribut:

ng-click="(variable) ? doSomething() : angular.noop()"

Sampai saya menemukan Anda bisa menggunakan ng-click = "variable && doSomething ()" `


1
ng-click="(variable) ? doSomething() : true"juga akan bekerja
pwolaq

ng-click = "(variable)? doSomething (): ''" juga akan berfungsi
joseph oun
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.