2017-01-11 4 views
2

나는 현재 knexjs.org을 사용하고 있으며, 일반적인 콜백 대신에 SQL 쿼리에 풀 연결을 사용합니다. 처음에는 부드럽게 움직입니다. 하지만 지금은 보통 수영장 연결 오류가 발생합니다. 이 코드와 같은 코드knexjs 릴리스 풀 연결 약속

knex('user_detail') 
       .select('id','full_name','phone','email') 
       .where('id', id_user) 
       .then((result) => { 
        resolve(result); 
       }) 
       .catch((error) => { 
        reject(error); 
       }) 

하지만 이제는 보통 오류 연결 시간 초과 및 오류 풀 연결이 발생합니다. 그것이 내가 연결을 해제하지 않은,하지만 난 같은 코드를 가지고 있기 때문에 어쩌면 오류를 얻는 이유는 우선,

knex('user_detail') 
       .select('id','full_name','phone','email') 
       .where('id', id_user) 
       .then((result) => { 
        resolve(result); 
       }) 
       .catch((error) => { 
        reject(error); 
       }) 
       .finally(() => { 
        knex.destroy() 
       }) 

그것은 첫 번째 시도에 대한 작동하지만 두 번째 시도에서 실패와 오류가 There is no pool defined on the current client 및 때로는 오류 The pool is probably full

누군가가 내게 무슨 일이 일어나고 있는지, 어떻게 해결하는지 설명 할 수 있습니까? 감사.

답변

0

처음에는 풀 연결이 부족한 이유를 설명하기에 충분한 정보가 없습니다. 당신은 내가 수있는 the pool is probably full 오류를 얻을 수있는 방법 완전한 코드 예제를 추가하는 경우

방법 일부 resolve()reject() 함수를 호출하는 당신이 비효율적으로 또는 완전히 잘못된 약속을 사용하는 직감 ...

을 제공합니다 대답을 편집하고 더 많은 것을 도울 수 있습니다. 예를 들어 우연히 해결되지 않은 여러 트랜잭션을 생성하면 풀이 채워집니다.

두 번째 코드 예제에서는 knex.destroy()을 호출하여 단일 풀 연결을 파괴하지 않지만 사용중인 knex 인스턴스와 풀을 완전히 파괴합니다.

따라서 knex.destroy() 후에 더 이상 knex 인스턴스를 사용할 수 없으며 데이터베이스 연결 구성을 다시 지정하여 완전히 새로운 인스턴스를 만들어야합니다.