How to handle database asynchronous operation in ionic 2/3

I am working with the database in ionic, I call one API that returns me a number of records, I have to insert those records into the database and when to insert operations are completed then I want to call select records from the database. problem is asynchronous behavior, the select records from the database called before the insert operations are completed. can anyone help me to resolve this? my code is below…

DbProvider:

export class DbProvider {


  public addData(dId: string, sId: string, subId: string, subName: string,
    dDate: string, cId: string, cName: string, stdId: string, stdName: string,
  ) {
    return new Promise((resolve, reject) => {
      this.db.executeSql("INSERT INTO data (dId , sId , subId , subName ," +
        " dDate , cId , cName , stdId , stdName ) VALUES (?, ?,?, ?,?, ?,?, ?,?)",
        [dId, sId, subId, subName, dDate, cId, cName, stdId, stdName]).then((data) => {
          resolve(data);
        }, (error) => {
          reject(error.tostring());
        });
    });
  }

}

database insert and call

for (let temp of ApiData) {

  
this.DbHandler.IsAvailable(temp.dId).then(data => {


  if (data) {
    console.log("did Available editing " + data);

    this.DbHandler.editData(temp.dId, temp.sId, temp.subId, temp.subName,
      temp.dDate, temp.cId, temp.cName);


  } else {
    console.log("did not Available inserting " + data);

    this.DbHandler.addData(temp.dId, temp.sId, temp.subId, temp.subName,
      temp.dDate, temp.cId, temp.cName);

  }
});
}

this.getDataFromDb();

I have multiple INSERTs I’d like to be done before starting SELECT requests. My problem is that the INSERT is not yet finished when the SELECT fires.

use Promise.all


var array_promise = [];
for (let temp of ApiData) {
    array_promise.push(this.DbHandler.addData(temp.dId, temp.sId, temp.subId, temp.subName,
    temp.dDate, temp.cId, temp.cName, temp.stdId, temp.stdName)); 
}

Promise.all(array_promise).then((resp)=>{
   this.getDataFromDb();
}, (e)=> console.error(e));
1 Like

i have tried but not working … check my updated question i have insert edit and checking the record operations.

done this way

let promises = [];
for (let temp of ApiData) {
  let promise = new Promise((resolve, reject) => {
    this.DbHandler.IsAvailable(temp.dId).then(data => {
      if (data) {
        console.log("did Available editing " + data);
        this.DbHandler.editData(temp.dId, temp.sId, temp.subId, temp.subName,
          temp.dDate, temp.cId, temp.cName).then(() => resolve());
      } else {
        console.log("did not Available inserting " + data);
        this.DbHandler.addData(temp.dId, temp.sId, temp.subId, temp.subName,
          temp.dDate, temp.cId, temp.cName).then(() => resolve());
      }
    });
  };
  promises.push(promise);
}
Promise.all(promises).then(() => this.getDataFromDb());