JS: Janji atau Panggilan Balik?

WBOY
Lepaskan: 2024-07-29 07:37:23
asal
1020 orang telah melayarinya

JS: Promise or Callback?

Memahami Janji berbanding Panggilan Balik dalam JavaScript

Soalan dan Jawapan Utama untuk Ujian Pensijilan

  1. Apakah fungsi panggil balik, dan bagaimanakah ia berbeza daripada fungsi biasa?

    • Fungsi panggil balik dihantar sebagai hujah kepada fungsi lain dan digunakan untuk mengendalikan operasi tak segerak. Tidak seperti fungsi biasa, panggil balik direka bentuk untuk dilaksanakan selepas tugasan tertentu selesai.
  2. Bagaimanakah Promises meningkatkan kebolehbacaan kod dan mengurus operasi tak segerak berbanding dengan panggilan balik?

    • Janji membenarkan rantaian dan pengendalian ralat yang lebih baik, yang membawa kepada kod yang lebih mudah dibaca dan diselenggara. Ia membantu mengelakkan struktur bersarang dalam yang dikenali sebagai "neraka panggil balik."
  3. Apakah keadaan utama Janji, dan bagaimanakah keadaan tersebut beralih antara keadaan ini?

    • Keadaan utama ialah: Belum selesai (keadaan awal), Dipenuhi (operasi selesai dengan jayanya) dan Ditolak (operasi gagal). A Promise bertukar daripada Menunggu kepada sama ada Ditepati atau Ditolak.
  4. Bagaimanakah anda boleh mengendalikan ralat menggunakan Promises, dan bagaimana ini dibandingkan dengan pengendalian ralat dengan panggilan balik?

    • Promises menyediakan kaedah tangkapan untuk mengendalikan ralat dengan cara yang diperkemas, manakala pengendalian ralat dengan panggilan balik selalunya memerlukan objek ralat yang dihantar dan berbilang semakan dalam panggilan balik bersarang.
  5. Apakah perbezaan antara Promise.all dan Promise.race, dan bilakah anda akan menggunakannya?

    • Promise.all diselesaikan apabila semua input Janji diselesaikan, menjadikannya berguna untuk menunggu beberapa operasi tak segerak selesai. Promise.race diselesaikan sebaik sahaja salah satu input Promises diselesaikan, berguna untuk senario di mana keputusan operasi selesai pertama diperlukan.
  6. Bagaimanakah sintaks async/wait memudahkan kerja dengan Promises dan apakah peraturan untuk menggunakan await?

    • Sintaks tak segerak/menunggu membolehkan menulis kod tak segerak dengan cara segerak, meningkatkan kebolehbacaan. await hanya boleh digunakan dalam fungsi async dan menjeda pelaksanaan sehingga Janji diselesaikan.

pengenalan

Dalam landskap JavaScript yang berkembang, mengurus operasi tak segerak dengan cekap adalah kunci untuk membina aplikasi web yang berprestasi. Walaupun panggilan balik adalah pendekatan asal, Promises telah memperkenalkan cara yang lebih berstruktur dan boleh dibaca untuk mengendalikan tugas tak segerak. Blog ini menyelidiki selok-belok menggunakan Janji berbanding panggilan balik, dengan anggapan anda sudah mempunyai pemahaman asas tentang konsep ini.

Faedah Janji Daripada Panggilan Balik

Kebolehbacaan dan Kebolehselenggaraan yang dipertingkatkan

Panggil balik, walaupun berfungsi, selalunya membawa kepada struktur bersarang dalam yang dikenali sebagai "neraka panggil balik", menjadikan kod sukar dibaca dan diselenggara.

Contoh Neraka Panggilan Balik:
fetchData(function(response1) {
  fetchMoreData(response1, function(response2) {
    fetchEvenMoreData(response2, function(response3) {
      console.log(response3);
    });
  });
});
Salin selepas log masuk
Diperbaiki dengan Janji:
fetchData()
  .then(response1 => fetchMoreData(response1))
  .then(response2 => fetchEvenMoreData(response2))
  .then(response3 => console.log(response3))
  .catch(error => console.error(error));
Salin selepas log masuk

Pengendalian Ralat

Dengan panggilan balik, pengendalian ralat boleh menjadi menyusahkan kerana anda perlu menghantar objek ralat dan mengendalikannya pada setiap peringkat.

Ralat Mengendalikan dengan Panggilan Balik:
function fetchData(callback) {
  setTimeout(() => {
    if (/* error condition */) {
      callback(new Error('An error occurred'), null);
    } else {
      callback(null, 'data');
    }
  }, 1000);
}

fetchData((error, data) => {
  if (error) {
    console.error(error);
  } else {
    console.log(data);
  }
});
Salin selepas log masuk
Ralat Mengendalikan dengan Janji:
function fetchData() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      if (/* error condition */) {
        reject(new Error('An error occurred'));
      } else {
        resolve('data');
      }
    }, 1000);
  });
}

fetchData()
  .then(data => console.log(data))
  .catch(error => console.error(error));
Salin selepas log masuk

Kaedah Janji Lanjutan

Janji.semua

Promise.all berguna apabila anda perlu menunggu beberapa operasi tak segerak selesai sebelum meneruskan.

Contoh:
const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, 'foo');
});

Promise.all([promise1, promise2, promise3]).then(values => {
  console.log(values); // [3, 42, "foo"]
});
Salin selepas log masuk

Janji.perlumbaan

Promise.race bermanfaat apabila anda memerlukan hasil operasi terpantas.

Contoh:
const promise1 = new Promise((resolve, reject) => {
  setTimeout(resolve, 500, 'one');
});

const promise2 = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, 'two');
});

Promise.race([promise1, promise2]).then(value => {
  console.log(value); // "two"
});
Salin selepas log masuk

Memudahkan Kod Asynchronous dengan async/menunggu

Sintaks tak segerak/menunggu membolehkan anda menulis kod tak segerak yang kelihatan segerak, meningkatkan kebolehbacaan dan mengurangkan kerumitan merantai Janji.

Contoh:
async function fetchData() {
  return 'data';
}

async function processData() {
  try {
    const data = await fetchData();
    console.log(data);
  } catch (error) {
    console.error(error);
  }
}

processData();
Salin selepas log masuk

Kesimpulan

Sementara panggilan balik meletakkan asas untuk mengendalikan operasi tak segerak dalam JavaScript, Promises telah meningkatkan kebolehbacaan, kebolehselenggaraan dan keupayaan pengendalian ralat kod tak segerak dengan ketara. Memahami cara dan bila untuk menggunakan alat ini dengan berkesan adalah penting untuk pembangunan JavaScript moden. Dengan Janji dan sintaks async/menunggu, pembangun boleh menulis kod yang lebih bersih, lebih terurus, membuka jalan untuk aplikasi yang lebih mantap.

Atas ialah kandungan terperinci JS: Janji atau Panggilan Balik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!