[英]NestJS (NodeJS) client.query running 3 times and result is empty
我只是潛入 NestJS(和承諾),並在我使用單個client.query
時讓一切正常。 由於 Postgres 不能使用 params 進行菊花鏈查詢,我需要在 0 到 n 次的任何地方運行client.query
,我試圖用一個簡單的 JS 循環來完成。
我到處搜索,但無法找到如何使用循環執行此操作(我可能正在搜索錯誤的術語...)
getQueryResult({
queries,
database,
values = []
}: {
queries: string[];
database: string;
values?: string[];
}): Promise<any> {
// Connect to remote Postgres via local SSH tunnel
const pool = new Pool({
user: '',
host: 'localhost',
database: database,
password: '',
port: 63333
});
const queryResult = [];
return pool.connect().then(client => { // <--THIS LINE RUNS 3 TIMES
for (let i = 0; i < queries.length; i++) {
client
.query(queries[i], values)
.then(res => {
client.release();
queryResult.push(res['rows']);
console.log('queryResult0', queryResult, queries.length);
})
.catch(err => {
client.release();
console.log(err);
});
}
console.log('queryResult', queryResult);
return queryResult;
});
}
我有兩個挑戰。
queries
包含一個查詢時:查詢觸發 3 次並產生以下結果queryResult []
queryResult0 [
[
{ ... correct results ... }
]
] 1
queryResult0 [
[
{ ... correct results ... }
]
] 1
queryResult0 [
[
{ ... correct results ... }
]
] 1
其中1
是數組的(正確)長度。
queryResult
只是空數組 - 由於在循環運行之前返回,我猜是因為它在循環之前顯示 --^ 。 超出范圍/異步在 SO 中都有描述,但我無法理解如何在這種特殊情況下修復它。 已閱讀所有內容如何從異步調用返回響應?至於第二個問題,您可以通過以下方式使用 async-await 執行多個異步調用:
getQueryResult({
queries,
database,
values = []
}: {
queries: string[];
database: string;
values?: string[];
}): Promise<any> {
// Connect to remote Postgres via local SSH tunnel
const pool = new Pool({
user: '',
host: 'localhost',
database: database,
password: '',
port: 63333
});
const queryResult = [];
return pool.connect().then(async (client) => {
try{
for (let i = 0; i < queries.length; i++) {
let res=await client.query(queries[i], values)
if(res){
client.release();
queryResult.push(res['rows']);
console.log('queryResult0', queryResult, queries.length);
}
}
console.log('queryResult', queryResult);
return queryResult;
}
catch(error){
return error;
}
});
}
對於第一個問題,我不太確定是什么導致了這種行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.