2015-09-10 2 views
0

Мне нужно вставить x строк в БД. Вот мой код:Угловое ожидание обещания в sqlite insert

dataFactory.insertData = function (responseData) 
     { 
      var q = $q.defer(); 
      var rows = 0; 
      $.each(responseData, function (index, value) 
      { 
       var query = "insert or ignore into ..."; 
       $cordovaSQLite.execute(db, query).then(function (res) 
       { 
        rows += 1; 
       }, function (err) 
       { 
        console.error(err); 
       }); 
      }); 
      q.resolve(rows); 
      return q.promise; 
     }; 

Как можно дождаться завершения всех вставок до разрешения вызова? Я считаю, что q.promise будет разрешен до того, как будут вставлены все строки.

+0

Я думаю, что внутри каждого применяется проверка как if (rows === responseData.length) означает все данные, вставленные в db. –

+0

То нормально, но не проблема. Я хочу решить обещание, как только все вставки будут завершены. Я думаю, что решение будет вызвано до того, как будут вставлены все строки. –

+0

разрешить обещание внутри вышеуказанной проверки. –

ответ

0

Попробуйте приведенный ниже код

dataFactory.insertData = function (responseData) 
      { 
       var q = $q.defer(); 
       var rows = 0; 
       var howManyRecordProcessed =0; 
       $.each(responseData, function (index, value) 
       { 
        //... prepare data... 
        $cordovaSQLite.execute(db, query).then(function (res) 
        { 
         //response after db save 
         howManyRecordProcessed++; //increment variable 
         if(howManyRecordProcessed === responseData.length) 
{ 
    //resolve here 
    q.resolve(rows); 
} 
         rows += 1; 
        }, function (err) 
        { 
         //if some error occured. 
         howManyRecordProcessed++; 
         console.error(err); 
        }); 
       }); 
       q.resolve(rows); 
       return q.promise; 
      }; 

ИЛИ Может быть переместить дб СОХРАНИТЬ логики на другой, который будет возвращать обещание, когда все накопленное.

Смежные вопросы