반응형
정의되지 않은 결과를 콜백으로 반환할 것을 약속합니다.
콜백 기능의 결과를 얻는 데 문제가 있습니다.아래는 제가 전화하는 비동기 기능입니다.
const utils = {
sendQuery: async function(query){
// Receives a query and returns raw results
// Query is using default database specified by pool
// Returns a Promise
let conn;
try {
conn = await pool.getConnection();
let queryString = query;
let rows = await conn.query(queryString);
let results = (this.formatResults(rows));
console.log(results);
return results;
} catch(err) {
throw new Error(err);
} finally {
if (conn) return conn.end();
}
}
module.exports = {
'utils': utils
}
위의 콘솔 로그는 예상 결과를 반환합니다.
그리고 아래는 위를 호출하는 함수입니다.
const db = require('../private/db');
db.utils.sendQuery(queryString).then(function(result){
console.log(result);
}).catch(err=>{
throw res.render('error', {'error': err.stack});
})
위의 콘솔 로그는 정의되지 않은 상태로 반환되며 그 이유를 알 수 없습니다.
여기서 진짜 문제는 이 부분입니다.if (conn) return conn.end();
.
사용할 때마다finally
, 이전의 모든 것을 덮어쓸 것입니다.return
,break
,continue
아니면throw
다음과 같은 경우에 발생합니다.try
아니면catch
토막토막
문제를 해결하려면 다음과 같이 해야 합니다.
const utils = {
sendQuery: async function(query){
// Receives a query and returns raw results
// Query is using default database specified by pool
// Returns a Promise
let conn;
try {
conn = await pool.getConnection();
let queryString = query;
let rows = await conn.query(queryString);
let results = (this.formatResults(rows));
console.log(results);
return results;
} catch(err) {
throw new Error(err);
} finally {
if (conn) conn.end();
}
}
module.exports = {
'utils': utils
}
잘 됐으면 좋겠네요.
제 생각에는 그냥 돌아오세요.results
대신에resolve(results)
. 함수가 이미 비동기 상태이며 여기에 약속 개체가 생성되지 않았습니다.그리고 그냥 던져요.err
대신에reject(err);
그리고 당신이 당신의 집으로 돌아온 이후로try
, 당신의 것은 필요 없습니다.finally
진술.
해결을 호출하는 대신 결과를 반환하기만 하면 됩니다.
const utils = {
sendQuery: async function(query){
// Receives a query and returns raw results
// Query is using default database specified by pool
// Returns a Promise
let conn;
try {
conn = await pool.getConnection();
let queryString = query;
let rows = await conn.query(queryString);
let results = (this.formatResults(rows));
console.log(results);
return results;
} catch(err) {
throw new Error(err)
} finally {
if (conn) return conn.end();
}
}
module.exports = {
'utils': utils
}
당신은 그냥 돌아올 수도 있고, 아니면 이것이 당신이 하려고 했던 것이라고 생각합니다.
sendQuery: (query) => {
let promise = new Promise(async (resolve, reject) => {
let conn;
try {
conn = await pool.getConnection();
let queryString = query;
let rows = await conn.query(queryString);
let results = (this.formatResults(rows));
console.log(results);
resolve(results);
} catch (err) {
reject(err);
} finally {
if (conn) {
conn.end();
}
}
})
return promise;
}
언급URL : https://stackoverflow.com/questions/60344335/promise-returning-undefined-result-to-callback
반응형
'source' 카테고리의 다른 글
ChildrenOutletContext에 대한 공급자 없음(injectionError) (0) | 2023.10.11 |
---|---|
C++에서 임의의 영숫자 문자열을 만들려면 어떻게 해야 합니까? (0) | 2023.10.11 |
XML용 텍스트 데이터를 인코딩하는 가장 좋은 방법 (0) | 2023.10.11 |
BYTE 데이터 유형을 정의하는 C/C++ 헤더 파일은 무엇입니까? (0) | 2023.10.11 |
피토치 텐서와 눔피 배열 (0) | 2023.10.11 |