nodejs mssql只调用一次

时间:2018-05-10 05:25:45

标签: sql-server node.js npm

我在NodeJS中有一个简单的函数循环,它从SQL Server数据库请求并返回记录。我还为Node.js使用Microsoft SQL Server客户端,MSSQL。在下面的代码中,我循环5次调用相同的函数,并期望结果将重复5次。但是,打印结果只显示最后一个。

for(var i = 0; i < 5; ++i){
       getRecord();
}

var getRecord = function(param) {
return new Promise(function(resolve, reject) {
    sql.close();
    sql.connect(config).then(pool => {
        return pool.request()
        .query('select TOP 1 * from table')
    }).then(result => {
        sql.close();
        console.log( result);
        console.log(' param : ' + param);
        resolve(result.recordset);
    }, function (err) {
        sql.close();
        reject(err);
    });

})
}

结果:

{ recordsets: [ [ [Object] ] ],
  recordset:
   [ { ..],
  output: {},
  rowsAffected: [ 1 ] }
 param : 4 

请帮助我理解为什么打印结果只有最后一个。

谢谢。

1 个答案:

答案 0 :(得分:1)

getRecord 的代码段中称为异步调用,因此循环结束只能访问执行查询。这就是mysql被调用一次的原因。

为了在每次迭代时调用该函数,请使代码段异步。

var getRecord = function (param) {
    return new Promise(function (resolve, reject) {
        sql.close();
        sql.connect(config).then(pool => {
            return pool.request()
                .query('select TOP 1 * from table')
        }).then(result => {
            sql.close();
            console.log(result);
            console.log(' param : ' + param);
            resolve(result.recordset);
        }, function (err) {
            sql.close();
            reject(err);
        });

    })
}

async function processRecord() {
    for (var i = 0; i < 5; ++i) {
        await getRecord();
    }
}

processRecord();