nodejs mssql вызывается только один раз - PullRequest
0 голосов
/ 10 мая 2018

У меня есть простой цикл функции в NodeJS, которая запрашивает базу данных SQL Server и возвращает запись. Я также использую клиент Microsoft SQL Server для Node.js, который 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 голосов
/ 10 мая 2018

В вашем фрагменте для 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...