Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript NestJS(NodeJS)client.query运行3次,结果为空_Javascript_Node.js_Nestjs - Fatal编程技术网

Javascript NestJS(NodeJS)client.query运行3次,结果为空

Javascript NestJS(NodeJS)client.query运行3次,结果为空,javascript,node.js,nestjs,Javascript,Node.js,Nestjs,我只是潜入NestJS(和Promissions),当我使用一个客户端时,一切都正常运行。由于Postgres无法使用参数进行daisychain查询,因此我需要运行client.query0到n次,这是我试图通过一个简单的JS循环来完成的 我到处都搜索过,但找不到如何使用循环执行此操作(我可能在搜索错误的术语…) 其中1是数组的(正确)长度 最后一次返回的queryResult只是一个空数组,因为它是在循环运行之前返回的,我猜是因为它在循环之前显示--^。关于范围外/async的描述非常全面,

我只是潜入NestJS(和Promissions),当我使用一个
客户端时,一切都正常运行。由于Postgres无法使用参数进行daisychain查询,因此我需要运行
client.query
0到n次,这是我试图通过一个简单的JS循环来完成的

我到处都搜索过,但找不到如何使用循环执行此操作(我可能在搜索错误的术语…)

其中
1
是数组的(正确)长度

  • 最后一次返回的
    queryResult
    只是一个空数组,因为它是在循环运行之前返回的,我猜是因为它在循环之前显示--^。关于范围外/async的描述非常全面,但在这种特殊情况下,我不知道如何解决它。我读了所有这些

  • 至于第二个问题,您可以通过以下方式使用async Wait执行多个异步调用:

        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;
            }
        });
    }
    
    getQueryResult({
    询问,
    数据库
    值=[]
    }: {
    查询:字符串[];
    数据库:字符串;
    值?:字符串[];
    }):承诺{
    //通过本地SSH隧道连接到远程Postgres
    常量池=新池({
    用户:“”,
    主机:“localhost”,
    数据库:数据库,
    密码:“”,
    港口:63333
    });
    常量queryResult=[];
    返回pool.connect().then(异步(客户端)=>{
    试一试{
    for(设i=0;i

    对于第一个问题,我不太确定是什么导致了这种行为。

    尝试上述方法,看看第一个问题是否仍然存在。您还可以阅读本文,了解如何使用async Wait和promises-感谢@naveen chahar,您刚刚救了我一天:)改进结果的一个细节是执行
    返回queryResult[0]改进结果的一个细节是执行return queryResult[0];由于某种原因,结果是数组中有一个数组。
    每个查询都有一个对象数组!此语句“console.log('queryResult',queryResult')也记录了三次,还是仅此语句“console.log('queryResult0',queryResult,querys.length')?
    queryResult []
    queryResult0 [
     [
       { ... correct results ... }
     ]
    ] 1
    queryResult0 [
     [
       { ... correct results ... }
     ]
    ] 1
    queryResult0 [
     [
       { ... correct results ... }
     ]
    ] 1
    
    
        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;
            }
        });
    }