Дождитесь завершения запроса SQL Server

#node.js

#node.js

Вопрос:

Я работаю над лямбда-скриптом, который вставляет данные файла S3 Excel в базу данных SQL Server.

Единственная проблема, с которой я сталкиваюсь, заключается в том, что мой цикл не дождался завершения выполнения моей базы данных.

Вот мой код :

 for(var key in data)
{
    var proj = data[key].project_id;

    request.input('proj_id', sql.Int, proj);            
    request.execute('ImportProject', function (err, recordset)
    {
         if(err)
         {
             callback(err);
             sql.close();                           
         }
         else
         {
            console.log('Project Insert : ', proj_id);
            sql.close(); 
            context.succeed; 
         }
     });                        
  }
  

Есть идеи, как я могу с этим справиться?

Ответ №1:

Используйте библиотеку async для получения результата. Поскольку у меня нет настройки сервера базы данных, я пишу пример кода здесь с комментариями. В вашем случае вам следует использовать функцию водопада, которая ведет себя как синхронная функция.

Установить : npm install --save async

 async.waterfall([
    function(callback) {
        // database connection in this  function if sucessfull connection happend call  the callback 
       // which contains the first parameter as error and others are input to next function
        callback(null, 'connection');
    },
    function(connection, callback) {
        //loop here, and finally callback after success 
        callback(null, 'done');
    }
], function (err, result) {
    // result now equals 'done'
    // final calculation here 
});
  

Пожалуйста, ознакомьтесь с документом async для получения дополнительной информации.
https://caolan.github.io/async/docs.html