Node.js ialah persekitaran masa jalan JavaScript dipacu peristiwa yang biasa digunakan untuk membangunkan aplikasi rangkaian berprestasi tinggi dan boleh skala. Dalam banyak senario, kami perlu menghantar berbilang permintaan kepada API atau sumber data yang berbeza dan susunan permintaan ini perlu dijamin. Artikel ini akan memperkenalkan tiga cara untuk mengekalkan pesanan untuk berbilang permintaan.
Dalam Node.js, fungsi panggil balik adalah teras pengaturcaraan tak segerak. Dalam berbilang permintaan, kami boleh menggunakan fungsi panggil balik satu permintaan sebagai fungsi panggil balik permintaan lain untuk memastikan pesanan mereka.
Sebagai contoh, kami ingin menghantar tiga permintaan HTTP, iaitu untuk mendapatkan maklumat pengguna, mendapatkan pesanan pengguna, dan mendapatkan alamat pengguna. Ketiga-tiga permintaan ini perlu dilaksanakan mengikut urutan kerana permintaan seterusnya perlu bergantung pada data permintaan sebelumnya.
getUserInfo(userId, function(err, userInfo) { if (err) throw err; getUserOrder(userId, function(err, userOrder) { if (err) throw err; getUserAddress(userId, function(err, userAddress) { if (err) throw err; // 处理获取到的用户信息、订单和地址 console.log(userInfo, userOrder, userAddress); }); }); });
Dalam kod di atas, getUserInfo, getUserOrder dan getUserAddress adalah semua permintaan HTTP tak segerak dan fungsi panggil baliknya berfungsi sebagai fungsi panggil balik permintaan lain. Dengan cara ini, kami boleh menjamin susunan permintaan dan memproses data yang sepadan selepas setiap permintaan selesai.
Dalam standard ES2017, JavaScript memperkenalkan sintaks async/wait, iaitu kaedah pengaturcaraan tak segerak berdasarkan Promise. Dengan menggunakan async/wait, kita boleh menjadikan kod tak segerak kelihatan seperti kod segerak, menjadikannya lebih mudah untuk mengurus susunan berbilang permintaan tak segerak.
async function getUserInfo(userId) { const response = await fetch(`/api/user/${userId}/info`); const userInfo = await response.json(); return userInfo; } async function getUserOrder(userId) { const response = await fetch(`/api/user/${userId}/order`); const userOrder = await response.json(); return userOrder; } async function getUserAddress(userId) { const response = await fetch(`/api/user/${userId}/address`); const userAddress = await response.json(); return userAddress; } async function getUserData(userId) { const userInfo = await getUserInfo(userId); const userOrder = await getUserOrder(userId); const userAddress = await getUserAddress(userId); return { userInfo, userOrder, userAddress }; } getUserData(userId) .then(data => { // 处理获取到的用户信息、订单和地址 console.log(data.userInfo, data.userOrder, data.userAddress); }) .catch(error => { console.error(error); });
Dalam kod di atas, getUserInfo, getUserOrder dan getUserAddress adalah semua permintaan tak segerak yang mengembalikan Promise. Dengan menggunakan async/wait, kami boleh menjamin pesanan mereka dengan hanya menulis kod secara berurutan. Fungsi getUserData ialah fungsi peringkat tinggi yang mengandungi tiga permintaan tak segerak Ia memperoleh data pengguna dan mengembalikan objek yang mengandungi maklumat, pesanan dan alamat pengguna. Kaedah kemudian objek Promise digunakan untuk memproses data yang dikembalikan, dan kaedah tangkapan digunakan untuk mengendalikan ralat.
Kaedah Promise.all ialah cara yang disediakan oleh Promise API yang boleh digunakan untuk melaksanakan berbilang permintaan tak segerak secara selari dan apabila ia selesai Pulangan keputusan. Apabila digunakan bersama dengan async/wait, kita boleh menggunakan sintaks pemusnah tatasusunan untuk menyahbina hasil yang dikembalikan kepada tatasusunan, menjadikannya lebih mudah untuk mengendalikan hasil berbilang permintaan.
const userInfoPromise = fetch(`/api/user/${userId}/info`).then(response => response.json()); const userOrderPromise = fetch(`/api/user/${userId}/order`).then(response => response.json()); const userAddressPromise = fetch(`/api/user/${userId}/address`).then(response => response.json()); Promise.all([userInfoPromise, userOrderPromise, userAddressPromise]) .then(([userInfo, userOrder, userAddress]) => { // 处理获取到的用户信息、订单和地址 console.log(userInfo, userOrder, userAddress); }) .catch(error => { console.error(error); });
Dalam kod di atas, kami menggunakan fungsi ambil untuk mendapatkan maklumat pengguna, pesanan dan alamat, dan masing-masing merangkumnya ke dalam objek Promise. Kami kemudian menggunakan kaedah Promise.all untuk melaksanakan ketiga-tiga Janji ini secara selari dan memusnahkan keputusannya ke dalam tatasusunan. Seperti kaedah di atas, kaedah kemudian objek Promise digunakan untuk memproses data yang dikembalikan, dan kaedah tangkapan digunakan untuk menangani ralat.
Dengan menggunakan fungsi panggil balik, async/wait dan Promise.all, kami boleh mengurus tertib berbilang permintaan tak segerak dan memproses keputusannya dengan mudah. Mengikut senario dan keperluan yang berbeza, kita boleh memilih cara yang paling sesuai untuk menulis kod Node.js.
Atas ialah kandungan terperinci nodejs berbilang permintaan menyimpan pesanan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!