gaurang
gaurang

Reputation: 2240

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.

Upvotes: 2

Views: 546

Answers (1)

heroin
heroin

Reputation: 2247

Call read from DB in then method:

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());

Upvotes: 1

Related Questions