Async/Await: Membongkar Misteri Janji
Apabila memulakan alam fungsi async/menunggu, seseorang mungkin menghadapi teka-teki yang menarik . Nampaknya fungsi async sentiasa mengembalikan objek Promise, yang membawa kepada kekeliruan apabila mencuba pengelogan konsol terus.
Mari kita mendalami fenomena ini dan membongkar selok-beloknya. Setiap fungsi async mematuhi paradigma Promise, mengembalikan objek Promise yang merangkum hasil operasi. Pernyataan menunggu berfungsi sebagai cara untuk menjeda pelaksanaan fungsi sehingga Janji sama ada diselesaikan atau ditolak.
Walaupun seseorang mungkin menganggap bahawa menunggu secara automatik membuka Janji, itu tidak berlaku. Menggunakan await hanya menyebabkan fungsi menunggu dan seterusnya mengembalikan Janji yang diselesaikan serta-merta. Walau bagaimanapun, Janji perlu dibuka secara eksplisit menggunakan await atau .then() untuk mengakses hasil sebenar.
Untuk menggambarkan, pertimbangkan coretan kod berikut yang menyerupai permintaan tak segerak:
const getJSON = async () => { const request = () => new Promise((resolve, reject) => ( setTimeout(() => resolve({ foo: 'bar'}), 2000) )); const json = await request(); return json; };
Jika seseorang cuba untuk konsol log keputusan terus, output akan menjadi a Janji:
console.log(getJSON()); // returns Promise
Walau bagaimanapun, menggunakan .then() untuk membuka Promise mendedahkan objek JSON yang dijangkakan:
getJSON().then(json => console.log(json)); // prints { foo: 'bar' }
Kesimpulannya, fungsi async sentiasa mengembalikan Janji, dan menunggu hanya digantung pelaksanaan sehingga resolusi. Untuk mendapatkan hasil, pembongkaran eksplisit menggunakan await atau .then() diperlukan. Mekanisme ini memastikan integriti model Promise dan menghalang tingkah laku yang tidak dapat diramalkan yang mungkin timbul jika akses terus kepada hasil Promise dibenarkan.
Atas ialah kandungan terperinci Mengapa Fungsi Async/Menunggu Sentiasa Membalas Janji?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!