Le code est écrit en Angularjs dans le cadre ionique. Je pense que les gens d'Angular peuvent aussi répondre à cette question. Lorsque j'appelle cette fonction, l'alerte affiche les tableaux vides "[]" et "indéfini" respectivement. Je pense que cela se produit en raison de la nature asynchrone de JavaScript. Je veux que cette fonction s'exécute de manière synchrone.code synchro en angularjs
/*This is the constructor */
constructor(public navCtrl: NavController, public SP: SqliteProvider) {
}
/*my function*/
getCustomerById()
{
this.SP.getCustomerById(this.id);
this.customerById = this.SP.customerById;
alert(this.SP.customerById);
alert(this.SP.customerById[0]);
}
/* La fonction SqliteProvider */
getCustomerById(cid)
{
this.customerById = [];
this.sqlite.create({
name: this.dbName,
location: 'default'
})
.then((db: SQLiteObject) =>{
db.executeSql('SELECT * FROM `customers` WHERE id= ?', [cid])
.then(result => {
var json = JSON.parse(result.rows.item(0).json);
//alert(json);
this.customerById.push(json);
// alert(JSON.stringify(this.customerObject));
})
.catch(e => console.log(e));
})
.catch(e => console.log(e));
}
'Je veux que cette fonction à exécuter synchronously' <= ** non, vous ne ** Vous ne savez pas comment utiliser correctement les appels asynchrones.. Lisez la réponse du lien dupliqué ci-dessus, en particulier l'en-tête nommé ** ES2015 +: promesses avec then() ** qui est similaire à ce que renvoie sqllite.create' et 'db.executeSql'. Vous devez renvoyer une promesse à votre appelant afin que l'appelant (getCustomerById) puisse s'y abonner. – Igor