Pertama, dari dokumentasi pg *:
const { Pool } = require('pg')
const pool = new Pool()
// the pool with emit an error on behalf of any idle clients
// it contains if a backend error or network partition happens
pool.on('error', (err, client) => {
console.error('Unexpected error on idle client', err) // your callback here
process.exit(-1)
})
// promise - checkout a client
pool.connect()
.then(client => {
return client.query('SELECT * FROM users WHERE id = $1', [1]) // your query string here
.then(res => {
client.release()
console.log(res.rows[0]) // your callback here
})
.catch(e => {
client.release()
console.log(err.stack) // your callback here
})
})
Kode/konstruksi ini cukup /made agar kumpulan Anda berfungsi, menyediakan barang Anda di sini sesuatu. Jika Anda mematikan aplikasi Anda, koneksi akan hang secara normal, karena pool dibuat dengan baik, tepatnya tidak untuk hang, bahkan jika itu menyediakan cara manual untuk menggantung, lihat bagian terakhir dari artikel .Juga lihat bagian merah sebelumnya yang mengatakan "Anda harus selalu mengembalikan klien..." untuk menerima
- wajib
client.release()
instruksi - sebelum mengakses argumen.
- klien cakupan/penutupan Anda dalam panggilan balik Anda.
Lalu , dari dokumentasi pg.client *:
Kueri teks biasa dengan janji
const { Client } = require('pg').Client
const client = new Client()
client.connect()
client.query('SELECT NOW()') // your query string here
.then(result => console.log(result)) // your callback here
.catch(e => console.error(e.stack)) // your callback here
.then(() => client.end())
menurut saya sintaks yang paling jelas:
- Anda mengakhiri klien apa pun hasilnya.
- Anda mengakses hasilnya sebelum berakhir klien.
- Anda tidak membatasi/menutup klien dalam panggilan balik Anda
Pertentangan semacam ini antara dua sintaksis yang mungkin membingungkan pada pandangan pertama, tetapi tidak ada keajaiban di sana, ini adalah sintaks konstruksi implementasi. Fokus pada Anda panggilan balik dan kueri, bukan pada konstruksi itu, ambil saja yang paling elegan untuk mata Anda dan beri makan dengan Anda kode.
*Saya menambahkan komentar // xxx Anda di sini untuk kejelasan