Janji dan Janji Janji JavaScript

Dalam tutorial ini, anda akan belajar mengenai janji-janji JavaScript dan rantai janji dengan bantuan contoh.

Dalam JavaScript, janji adalah cara yang baik untuk menangani operasi tidak segerak . Ia digunakan untuk mengetahui sama ada operasi asinkron berjaya diselesaikan atau tidak.

Janji mungkin mempunyai salah satu daripada tiga keadaan.

  • Yang belum selesai
  • Terpenuhi
  • Ditolak

Janji bermula dalam keadaan belum selesai. Itu bermaksud prosesnya tidak lengkap. Sekiranya operasi berjaya, proses berakhir dalam keadaan yang dipenuhi. Dan, jika berlaku ralat, prosesnya berakhir dalam keadaan yang ditolak.

Sebagai contoh, apabila anda meminta data dari pelayan dengan menggunakan janji, data tersebut akan berada dalam keadaan tertunda. Apabila data berjaya tiba, data akan berada dalam keadaan yang memuaskan. Sekiranya ralat berlaku, maka ia akan berada dalam keadaan yang ditolak.

Buat Janji

Untuk membuat objek janji, kami menggunakan Promise()konstruktor.

 let promise = new Promise(function(resolve, reject)( //do something ));

The Promise()pembina mengambil fungsi sebagai hujah. Fungsi ini juga menerima dua fungsi resolve()dan reject().

Sekiranya janji itu berjaya, resolve()fungsi dipanggil. Dan, jika berlaku ralat, reject()fungsi dipanggil.

Mari kita anggap bahawa program di bawah adalah program tidak segerak. Maka program dapat dikendalikan dengan menggunakan janji.

Contoh 1: Program dengan Janji

 const count = true; let countValue = new Promise(function (resolve, reject) ( if (count) ( resolve("There is a count value."); ) else ( reject("There is no count value"); ) )); console.log(countValue);

Pengeluaran

 Janji (: "Ada nilai hitungan.")

Dalam program di atas, Promiseobjek dibuat yang mengambil dua fungsi: resolve()dan reject(). resolve()digunakan sekiranya proses itu berjaya dan reject()digunakan apabila berlaku kesalahan dalam janji.

Janji itu diselesaikan sekiranya nilai kiraan itu benar.

Memenuhi janji JavaScript

Janji Janji JavaScript

Janji berguna apabila anda harus menangani lebih dari satu tugas tak segerak, satu demi satu. Untuk itu, kami menggunakan janji berantai.

Anda dapat melakukan operasi setelah janji diselesaikan menggunakan kaedah then(), catch()dan finally().

Kaedah JavaScript kemudian ()

The then()kaedah yang digunakan dengan panggil balik apabila janji yang berjaya dipenuhi atau diselesaikan.

Sintaks then()kaedah adalah:

 promiseObject.then(onFulfilled, onRejected);

Contoh 2: Mengikat Janji dengan kemudian ()

 // returns a promise let countValue = new Promise(function (resolve, reject) ( resolve('Promise resolved'); )); // executes when promise is resolved successfully countValue.then( function successValue(result) ( console.log(result); ), ) .then( function successValue1() ( console.log('You can call multiple functions this way.'); ), );

Pengeluaran

 Janji diselesaikan Anda boleh memanggil pelbagai fungsi dengan cara ini.

Dalam program di atas, then()kaedah ini digunakan untuk mengaitkan fungsi sesuai dengan janji. The then()kaedah dipanggil apabila janji itu diselesaikan dengan jayanya.

Anda boleh mengaitkan pelbagai then()kaedah dengan janji.

Kaedah tangkapan JavaScript ()

The catch()kaedah yang digunakan dengan panggil balik apabila sampai masa janji ditolak atau jika ralat berlaku. Sebagai contoh,

 // returns a promise let countValue = new Promise(function (resolve, reject) ( reject('Promise rejected'); )); // executes when promise is resolved successfully countValue.then( function successValue(result) ( console.log(result); ), ) // executes if there is an error .catch( function errorValue(result) ( console.log(result); ) );

Pengeluaran

 Janji ditolak

Dalam program di atas, janji itu ditolak. Dan catch()kaedah itu digunakan dengan janji untuk menangani kesalahan tersebut.

Mengendalikan rantai janji JavaScript

Janji JavaScript berbanding Panggilan Balik

Janji serupa dengan fungsi panggilan balik dalam arti bahawa kedua-duanya dapat digunakan untuk menangani tugas tak segerak.

Fungsi panggilan balik JavaScript juga dapat digunakan untuk melakukan tugas segerak.

Perbezaan mereka dapat diringkaskan dalam perkara berikut:

Janji JavaScript

  1. Sintaksnya mesra pengguna dan senang dibaca.
  2. Ralat pengendalian lebih mudah diuruskan.
  3. Contoh:
     api (). kemudian (fungsi (hasil) (kembali api2 ();)). kemudian (fungsi (hasil2) (kembali api3 ();)). kemudian (fungsi (hasil3) (// lakukan kerja)). tangkapan ( fungsi (ralat) (// menangani sebarang ralat yang mungkin berlaku sebelum ini));

Panggilan balik JavaScript

  1. Sintaksisnya sukar difahami.
  2. Kesalahan pengendalian mungkin sukar dikendalikan.
  3. Contoh:
     api (function (result) (api2 (function (result2) (api3 (function (result3) (// buat kerja jika (error) (// buat sesuatu) lain (// buat sesuatu)));));)) ;

Kaedah akhirnya JavaScript ()

You can also use the finally() method with promises. The finally() method gets executed when the promise is either resolved successfully or rejected. For example,

 // returns a promise let countValue = new Promise(function (resolve, reject) ( // could be resolved or rejected resolve('Promise resolved'); )); // add other blocks of code countValue.finally( function greet() ( console.log('This code is executed.'); ) );

Output

 This code is executed.

JavaScript Promise Methods

There are various methods available to the Promise object.

Method Description
all(iterable) Waits for all promises to be resolved or any one to be rejected
allSettled(iterable) Waits until all promises are either resolved or rejected
any(iterable) Returns the promise value as soon as any one of the promises is fulfilled
race(iterable) Wait until any of the promises is resolved or rejected
reject(reason) Returns a new Promise object that is rejected for the given reason
resolve(value) Returns a new Promise object that is resolved with the given value
catch() Appends the rejection handler callback
then() Appends the resolved handler callback
finally() Appends a handler to the promise

To learn more about promises in detail, visit JavaScript Promises.

Artikel menarik...