nodejs berbilang permintaan menyimpan pesanan

王林
Lepaskan: 2023-05-23 21:46:39
asal
806 orang telah melayarinya

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.

1. Gunakan fungsi panggil balik

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);
    });
  });
});
Salin selepas log masuk

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.

2. Gunakan async/wait

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);
  });
Salin selepas log masuk

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.

3. Gunakan Promise.all dan sintaks pemusnah tatasusunan

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);
  });
Salin selepas log masuk

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!

sumber:php.cn
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!