


Mari kita bincangkan tentang cara menggunakan fungsi async dalam Node
Dengan versi baharu enjin V8, Node menyokong ciri fungsi async bermula dari 7.6. Pada 31 Oktober tahun ini, Node.js 8 juga menjadi versi sokongan jangka panjang baharu, jadi anda boleh menggunakan fungsi async dalam kod anda dengan yakin. Dalam artikel ini, saya akan memperkenalkan secara ringkas apakah fungsi async dan cara ia boleh mengubah cara kami menulis aplikasi Node.js.
Apakah fungsi async
Menggunakan fungsi async, anda boleh menulis kod tak segerak berasaskan Promise 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. [Tutorial berkaitan yang disyorkan: tutorial video nodejs, Pengajaran pengaturcaraan]
kata kunci tunggu boleh digunakan untuk menunggu Janji diselesaikan dan mengembalikan nilai yang dilaksanakan. 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)
Berhijrah kepada fungsi tak segerak
Jika aplikasi Node.js anda sudah menggunakan Promise, maka anda hanya perlu menulis semula panggilan berantai asal ke These Promise of anda 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)
3 Amalan terbaik untuk fungsi Async
Gunakan fungsi async dalam express
express sudah pun 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)
Tetapi seperti yang ditunjukkan oleh Keith Smith, perkara di atas contoh mempunyai masalah yang serius - jika Janji akhirnya ditolak, kerana tiada pengendalian ralat di sini, pemproses laluan ekspres akan digantung.
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) }))
Laksanakan secara 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) }
Dalam contoh ini, apa yang berlaku Apa?
Kod anda mula-mula akan mendapat pengguna,
kemudian dapatkan produk,
dan akhirnya membuat pembayaran.
Seperti yang anda boleh 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) }
Dan kadangkala, anda hanya memerlukan nilai pulangan bagi Promise yang paling cepat diselesaikan - dalam kes ini, anda boleh menggunakan kaedah Promise.race.
Untuk lebih banyak pengetahuan berkaitan nod, sila lawati: tutorial nodejs!
Atas ialah kandungan terperinci Mari kita bincangkan tentang cara menggunakan fungsi async dalam Node. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

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

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

async ialah es7. async dan await ialah penambahan baharu kepada ES7 dan merupakan penyelesaian untuk operasi asynchronous/wait boleh dikatakan sebagai gula sintaktik untuk modul bersama dan fungsi penjana, menyelesaikan kod tak segerak dengan semantik yang lebih jelas. Seperti namanya, async bermaksud "tak segerak".

Bagaimana untuk mengendalikan muat naik fail? Artikel berikut akan memperkenalkan kepada anda cara menggunakan ekspres untuk mengendalikan muat naik fail dalam projek nod saya harap ia akan membantu anda!

Cara memadam nod dengan nvm: 1. Muat turun "nvm-setup.zip" dan pasangkannya pada pemacu C 2. Konfigurasikan pembolehubah persekitaran dan semak nombor versi melalui arahan "nvm -v" 3. Gunakan "nvm arahan install" Pasang nod; 4. Padamkan nod yang dipasang melalui arahan "nvm uninstall".

Artikel ini akan berkongsi dengan anda alat pengurusan proses Node "pm2", dan bercakap tentang mengapa pm2 diperlukan, cara memasang dan menggunakan pm2, saya harap ia akan membantu semua orang!

Penjelasan dan Panduan Pemasangan Terperinci untuk Pinetwork Nodes Artikel ini akan memperkenalkan ekosistem pinetwork secara terperinci - nod pi, peranan utama dalam ekosistem pinetwork, dan menyediakan langkah -langkah lengkap untuk pemasangan dan konfigurasi. Selepas pelancaran Rangkaian Ujian Blockchain Pinetwork, nod PI telah menjadi bahagian penting dari banyak perintis yang aktif mengambil bahagian dalam ujian, bersiap sedia untuk pelepasan rangkaian utama yang akan datang. Jika anda tidak tahu kerja pinet, sila rujuk apa itu picoin? Berapakah harga untuk penyenaraian? Penggunaan PI, perlombongan dan analisis keselamatan. Apa itu Pinetwork? Projek Pinetwork bermula pada tahun 2019 dan memiliki syiling pi cryptocurrency eksklusifnya. Projek ini bertujuan untuk mewujudkan satu yang semua orang boleh mengambil bahagian

Bagaimana untuk membungkus fail boleh laku nodejs dengan pkg? Artikel berikut akan memperkenalkan kepada anda cara menggunakan pkg untuk membungkus projek Node ke dalam fail boleh laku. Saya harap ia akan membantu anda!

npm node gyp gagal kerana versi "node-gyp.js" dan "Node.js" tidak sepadan Penyelesaiannya: 1. Kosongkan cache nod melalui "npm cache clean -f" 2. Melalui "npm install -. g n" Pasang modul n; 3. Pasang versi "nod v12.21.0" melalui arahan "n v12.21.0".

Pengesahan adalah salah satu bahagian terpenting dalam mana-mana aplikasi web. Tutorial ini membincangkan sistem pengesahan berasaskan token dan cara ia berbeza daripada sistem log masuk tradisional. Pada penghujung tutorial ini, anda akan melihat demo berfungsi sepenuhnya yang ditulis dalam Angular dan Node.js. Sistem Pengesahan Tradisional Sebelum beralih kepada sistem pengesahan berasaskan token, mari kita lihat sistem pengesahan tradisional. Pengguna memberikan nama pengguna dan kata laluan mereka dalam borang log masuk dan klik Log Masuk. Selepas membuat permintaan, sahkan pengguna di bahagian belakang dengan menanyakan pangkalan data. Jika permintaan itu sah, sesi dibuat menggunakan maklumat pengguna yang diperoleh daripada pangkalan data dan maklumat sesi dikembalikan dalam pengepala respons supaya ID sesi disimpan dalam penyemak imbas. Menyediakan akses kepada aplikasi tertakluk kepada
