Angular 等待 sqlite 插入中的承诺

Angular wait for promise in sqlite insert

我需要在数据库中插入 x 行。这是我的代码:

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;
        };

如何在调用 resolve 之前等待所有插入完成?我相信 q.promise 会在插入所有行之前得到解决。

试试下面的代码

  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;
            };

可能会将数据库保存逻辑移动到另一个将 return 承诺全部保存的逻辑。