Rumah hujung hadapan web Soal Jawab bahagian hadapan Apakah kegunaan async dalam nodejs

Apakah kegunaan async dalam nodejs

Jan 10, 2022 am 11:11 AM
nodejs

Dalam nodej, kata kunci async boleh digunakan untuk menentukan fungsi Apabila fungsi async dipanggil, Promise akan dikembalikan Apabila fungsi async mengembalikan nilai, Promise akan direalisasikan melontar Apabila ralat berlaku, Janji ditolak.

Apakah kegunaan async dalam nodejs

Persekitaran pengendalian tutorial ini: sistem Windows 10, nodejs versi 12.19.0, komputer DELL G3.

Apakah penggunaan async dalam nodejs

1 Apakah fungsi async

Menggunakan fungsi async, anda boleh menggunakan ia berdasarkan kod Asynchronous dengan Promises ditulis sama seperti kod segerak. Sebaik sahaja anda mentakrifkan fungsi menggunakan kata kunci async, anda boleh menggunakan kata kunci await dalam fungsi tersebut. Apabila fungsi async dipanggil, ia mengembalikan Janji. Apabila fungsi async mengembalikan nilai, Janji dipenuhi jika ralat dilemparkan dalam fungsi, Janji ditolak.

kata kunci tunggu boleh digunakan untuk menunggu Janji diselesaikan dan mengembalikan nilai yang direalisasikan. Jika nilai yang diluluskan untuk menunggu bukan Janji, ia menukar nilai kepada Janji yang diselesaikan.

const rp = require('request-promise')
async function main () {
 const result = await rp('https://google.com')
 const twenty = await 20
 // 睡个1秒钟
 await new Promise (resolve => {
  setTimeout(resolve, 1000)
 })
 return result
}
main()
 .then(console.log)
 .catch(console.error)
Salin selepas log masuk

2 Berhijrah ke fungsi tak segerak

Jika aplikasi Node.js anda sudah menggunakan Promise, maka anda hanya perlu menulis semula panggilan berantai asal untuk melaksanakan Janji ini menanti.

Jika aplikasi anda masih menggunakan fungsi panggil balik, anda harus beralih secara beransur-ansur kepada menggunakan fungsi async. Anda boleh menggunakan teknologi baharu ini apabila membangunkan beberapa ciri baharu. Apabila anda perlu memanggil beberapa kod lama, anda hanya boleh membungkusnya ke dalam Janji dan memanggilnya dengan cara baharu.

Untuk melakukan ini, anda boleh menggunakan kaedah util.promisify terbina dalam:

const util = require('util')
const {readFile} = require('fs')
const readFileAsync = util.promisify(readFile)
async function main () {
 const result = await readFileAsync('.gitignore')
 return result
}
main()
 .then(console.log)
 .catch(console.error)
Salin selepas log masuk

3 Amalan terbaik untuk fungsi Async

3.1 Gunakan dalam fungsi async ekspres

express pada asalnya menyokong Promise, jadi menggunakan fungsi async dalam express agak mudah:

const express = require('express')
const app = express()
app.get('/', async (request, response) => {
 // 在这里等待 Promise
 // 如果你只是在等待一个单独的 Promise,你其实可以直接将将它作为返回值返回,不需要使用 await 去等待。
 const result = await getContent()
 response.send(result)
})
app.listen(process.env.PORT)
Salin selepas log masuk

Tetapi seperti yang ditunjukkan oleh Keith Smith, contoh di atas mempunyai masalah yang serius Masalah - Jika Janji berakhir ditolak, pengendali laluan ekspres akan digantung kerana tiada pengendalian ralat.

Untuk menyelesaikan masalah ini, anda harus membalut pengendali tak segerak anda dalam fungsi yang mengendalikan ralat:

const awaitHandlerFactory = (middleware) => {
 return async (req, res, next) => {
  try {
   await middleware(req, res, next)
  } catch (err) {
   next(err)
  }
 }
}
// 然后这样使用:
app.get('/', awaitHandlerFactory(async (request, response) => {
 const result = await getContent()
 response.send(result)
}))
Salin selepas log masuk

3.2 Perlaksanaan selari

Sebagai contoh Anda sedang menulis program di mana operasi memerlukan dua input, satu daripada pangkalan data dan satu lagi daripada perkhidmatan luaran:

async function main () {
 const user = await Users.fetch(userId)
 const product = await Products.fetch(productId)
 await makePurchase(user, product)
}
Salin selepas log masuk

Dalam contoh ini, apa yang berlaku?

Kod anda mula-mula akan mendapat pengguna,

kemudian dapatkan produk,

dan akhirnya membuat pembayaran.

Seperti yang anda lihat, memandangkan tiada saling bergantung antara dua langkah pertama, anda sebenarnya boleh melaksanakannya secara selari. Di sini, anda harus menggunakan kaedah Promise.all:

async function main () {
 const [user, product] = await Promise.all([
  Users.fetch(userId),
  Products.fetch(productId)
 ])
 await makePurchase(user, product)
}
Salin selepas log masuk

Dan kadangkala, anda hanya memerlukan nilai pulangan bagi Promise yang paling cepat diselesaikan - dalam kes ini, anda boleh menggunakan kaedah Promise.race.

3.3 Ralat pengendalian

Pertimbangkan contoh berikut:

async function main () {
 await new Promise((resolve, reject) => {
  reject(new Error('error'))
 })
}
main()
 .then(console.log)
Salin selepas log masuk

Apabila kod ini dilaksanakan, anda akan melihat mesej yang serupa dengan ini:

(node:69738) UnhandledPromiseRejectionAmaran: Penolakan janji tidak dikendalikan (id penolakan: 2): Ralat: ralat

(nod:69738) [DEP0018] Amaran Penahanan: Penolakan janji yang tidak dikendalikan akan ditamatkan pada masa hadapan tidak dikendalikan akan menamatkan proses Node.js dengan kod keluar bukan sifar.

Dalam versi Node.js yang lebih baharu, jika Promise ditolak dan tidak dikendalikan, keseluruhan proses Node.js akan terganggu. Oleh itu, anda harus menggunakan try-catch apabila perlu: ​​

const util = require('util')
async function main () {
 try {
  await new Promise((resolve, reject) => {
   reject(new Error('
Salin selepas log masuk

Untuk lebih banyak pengetahuan berkaitan nod, sila lawati: tutorial nodejs! !

Atas ialah kandungan terperinci Apakah kegunaan async dalam nodejs. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Perbezaan antara nodejs dan vuejs Perbezaan antara nodejs dan vuejs Apr 21, 2024 am 04:17 AM

Node.js ialah masa jalan JavaScript bahagian pelayan, manakala Vue.js ialah rangka kerja JavaScript sisi klien untuk mencipta antara muka pengguna interaktif. Node.js digunakan untuk pembangunan bahagian pelayan, seperti pembangunan API perkhidmatan belakang dan pemprosesan data, manakala Vue.js digunakan untuk pembangunan sisi klien, seperti aplikasi satu halaman dan antara muka pengguna yang responsif.

Adakah nodejs rangka kerja bahagian belakang? Adakah nodejs rangka kerja bahagian belakang? Apr 21, 2024 am 05:09 AM

Node.js boleh digunakan sebagai rangka kerja bahagian belakang kerana ia menawarkan ciri seperti prestasi tinggi, kebolehskalaan, sokongan merentas platform, ekosistem yang kaya dan kemudahan pembangunan.

Bagaimana untuk menyambungkan nodejs ke pangkalan data mysql Bagaimana untuk menyambungkan nodejs ke pangkalan data mysql Apr 21, 2024 am 06:13 AM

Untuk menyambung ke pangkalan data MySQL, anda perlu mengikuti langkah berikut: Pasang pemacu mysql2. Gunakan mysql2.createConnection() untuk mencipta objek sambungan yang mengandungi alamat hos, port, nama pengguna, kata laluan dan nama pangkalan data. Gunakan connection.query() untuk melaksanakan pertanyaan. Akhir sekali gunakan connection.end() untuk menamatkan sambungan.

Apakah pembolehubah global dalam nodejs Apakah pembolehubah global dalam nodejs Apr 21, 2024 am 04:54 AM

Pembolehubah global berikut wujud dalam Node.js: Objek global: modul Teras global: proses, konsol, memerlukan pembolehubah persekitaran Runtime: __dirname, __filename, __line, __column Constants: undefined, null, NaN, Infinity, -Infinity

Apakah perbezaan antara fail npm dan npm.cmd dalam direktori pemasangan nodejs? Apakah perbezaan antara fail npm dan npm.cmd dalam direktori pemasangan nodejs? Apr 21, 2024 am 05:18 AM

Terdapat dua fail berkaitan npm dalam direktori pemasangan Node.js: npm dan npm.cmd Perbezaannya adalah seperti berikut: sambungan berbeza: npm ialah fail boleh laku dan npm.cmd ialah pintasan tetingkap arahan. Pengguna Windows: npm.cmd boleh digunakan daripada command prompt, npm hanya boleh dijalankan dari baris arahan. Keserasian: npm.cmd adalah khusus untuk sistem Windows, npm tersedia merentas platform. Cadangan penggunaan: Pengguna Windows menggunakan npm.cmd, sistem pengendalian lain menggunakan npm.

Adakah terdapat perbezaan besar antara nodejs dan java? Adakah terdapat perbezaan besar antara nodejs dan java? Apr 21, 2024 am 06:12 AM

Perbezaan utama antara Node.js dan Java ialah reka bentuk dan ciri: Didorong peristiwa vs. didorong benang: Node.js dipacu peristiwa dan Java dipacu benang. Satu-benang vs. berbilang benang: Node.js menggunakan gelung acara satu-benang dan Java menggunakan seni bina berbilang benang. Persekitaran masa jalan: Node.js berjalan pada enjin JavaScript V8, manakala Java berjalan pada JVM. Sintaks: Node.js menggunakan sintaks JavaScript, manakala Java menggunakan sintaks Java. Tujuan: Node.js sesuai untuk tugas intensif I/O, manakala Java sesuai untuk aplikasi perusahaan besar.

Adakah nodejs bahasa pembangunan bahagian belakang? Adakah nodejs bahasa pembangunan bahagian belakang? Apr 21, 2024 am 05:09 AM

Ya, Node.js ialah bahasa pembangunan bahagian belakang. Ia digunakan untuk pembangunan bahagian belakang, termasuk mengendalikan logik perniagaan sebelah pelayan, mengurus sambungan pangkalan data dan menyediakan API.

Mana satu untuk dipilih antara nodejs dan java? Mana satu untuk dipilih antara nodejs dan java? Apr 21, 2024 am 04:40 AM

Node.js dan Java masing-masing mempunyai kebaikan dan keburukan dalam pembangunan web, dan pilihan bergantung pada keperluan projek. Node.js cemerlang dalam aplikasi masa nyata, pembangunan pesat dan seni bina perkhidmatan mikro, manakala Java cemerlang dalam sokongan, prestasi dan keselamatan gred perusahaan.

See all articles