我在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
请帮助我理解为什么打印结果只有最后一个。
谢谢。
答案 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();