Node.js ialah persekitaran berjalan JavaScript yang dibina pada enjin Chrome V8 dan berdasarkan model I/O tidak disekat dipacu peristiwa, yang menjadikannya berfungsi dengan baik apabila memproses pengumpulan data yang besar dan permintaan serentak yang tinggi. Tetapi dalam beberapa kes, kami perlu membuat permintaan segerak, kerana kami perlu menunggu permintaan sebelumnya selesai sebelum membuat permintaan seterusnya, yang memerlukan beberapa kemahiran khas untuk membuat permintaan segerak.
Terdapat banyak cara untuk membuat permintaan segerak dalam Node.js, kaedah yang lebih biasa termasuk: menggunakan panggilan balik, menggunakan Promise dan menggunakan async/await. Penggunaan kaedah ini akan diperkenalkan di sini.
Kaedah pemprosesan tak segerak yang terawal dalam Node.js ialah fungsi panggil balik. Operasi seterusnya boleh dilakukan dalam fungsi panggil balik, atau fungsi panggil balik boleh dihantar sebagai nilai kepada fungsi lain. Fungsi panggil balik ialah fungsi JavaScript yang boleh memanggil fungsi lain dalam fungsi tersebut.
Apabila membuat permintaan segerak, anda boleh menggunakan fungsi panggil balik untuk memastikan permintaan itu selesai sebelum melakukan operasi lain. Contohnya:
const request = require('request'); request('https://jsonplaceholder.typicode.com/todos/1', function (error, response, body) { if (!error && response.statusCode == 200) { console.log(body) // 输出请求得到的结果 } })
Dalam contoh di atas, kami menggunakan modul permintaan untuk membuat permintaan dan mengeluarkan hasil ke konsol. Memandangkan fungsi panggil balik diproses secara tak segerak, kita perlu melakukan operasi seterusnya dalam fungsi panggil balik. Ini memastikan bahawa operasi lain boleh dilakukan selepas permintaan selesai.
Promise ialah kaedah pemprosesan tak segerak yang lebih maju, yang menyediakan kod yang lebih fleksibel dan boleh dibaca. Janji mewakili penyiapan atau kegagalan operasi tak segerak dan mengembalikan nilai. Ia memudahkan kerumitan kod tak segerak dan menyokong panggilan berantai.
Apabila menggunakan Promise untuk membuat permintaan segerak, anda boleh menggunakan modul request-promise. Modul ini ialah versi Promise bagi modul permintaan, yang boleh menukar permintaan permintaan kepada objek Promise dengan mudah untuk melaksanakan permintaan segerak. Contohnya:
const rp = require('request-promise'); rp('https://jsonplaceholder.typicode.com/todos/1') .then(function (response) { console.log(response); }) .catch(function (err) { console.log(err); });
Dalam contoh di atas, kami menggunakan modul request-promise untuk membuat permintaan dan menggunakan objek Promise untuk mengendalikan hasil permintaan. Ini memastikan bahawa operasi lain boleh dilakukan selepas permintaan selesai.
async/wait ialah kaedah pemprosesan tak segerak terbaharu dalam ES2017. Ia menulis kod tak segerak dengan cara yang lebih segerak, menjadikan kod tak segerak lebih mudah dibaca dan diselenggara.
Apabila menggunakan async/menunggu untuk membuat permintaan segerak, anda perlu menggunakan modul permintaan-janji. Contohnya:
const rp = require('request-promise'); async function getData() { const result = await rp('https://jsonplaceholder.typicode.com/todos/1'); console.log(result); } getData().catch((err) => { console.error(err); });
Dalam contoh di atas, kami menggunakan async/waiit untuk merangkum modul request-promise. Menggunakan kata kunci async boleh menukar fungsi getData() menjadi fungsi tak segerak, dan kemudian kami menggunakan kata kunci await untuk menunggu permintaan selesai sebelum melaksanakan operasi lain di dalam fungsi tersebut.
Ringkasan
Sebagai bahasa bahagian pelayan berprestasi tinggi, Node.js telah meletakkan keupayaan pemprosesan tak segeraknya ke dalam permainan sepenuhnya. Tetapi dalam beberapa kes, permintaan segerak diperlukan Dalam kes ini, kami boleh menggunakan panggilan balik, Janji dan async/menunggu untuk membuat permintaan segerak. Dalam pembangunan sebenar, kaedah yang paling sesuai boleh dipilih mengikut situasi sebenar.
Atas ialah kandungan terperinci permintaan segerak nodejs. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!