Najpierw z dokumentacji 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
})
})
Ten kod/konstrukcja jest wystarczająca /stworzony, aby Twój basen działał, zapewniając Twoją rzecz tutaj rzeczy. Jeśli zamkniesz aplikację, połączenie zawiesi się normalnie, ponieważ pula jest utworzona poprawnie, dokładnie po to, aby się nie zawieszać, nawet jeśli zapewnia ręczny sposób zawieszania, zobacz ostatnią sekcję artykuł .Spójrz także na poprzednią czerwoną sekcję, która mówi „Zawsze musisz zwrócić klienta...”, aby zaakceptować
- obowiązkowe
client.release()
instrukcja - przed uzyskaniem dostępu do argumentu.
- Twój zakres/klient zamknięcia w ramach wywołań zwrotnych.
Wtedy , z dokumentacji pg.client *:
Zwykłe zapytanie tekstowe z obietnicą
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())
wydaje mi się najczystszą składnią:
- zakończysz klienta bez względu na wyniki.
- dostęp do wyniku przed zakończeniem klienta.
- nie ograniczasz/nie zamykasz klienta w ramach wywołań zwrotnych
Jest to rodzaj opozycji między dwiema składniami, który może być mylący na pierwszy rzut oka, ale nie ma w tym żadnej magii, jest to składnia konstrukcji implementacji. Skup się na swojej wywołania zwrotne i zapytania, a nie te konstrukcje, po prostu wybierz najbardziej eleganckie dla twoich oczu i nakarm je swoim kod.
*Dodałem komentarze // tutaj Twój xxx dla jasności