このコードは、IonicフレームワークのAngularjsで書かれています。 Angularの背景にいる人もこの質問に答えることができると思います。anglejsの同期コード
この関数を呼び出すと、空の配列「[]」と「未定義」がそれぞれ表示されます。私はこれがJavaScriptの非同期性の原因であると思います。この関数を同期して実行します。
/*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]);
}
/* 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));
}
'私は、この関数はsynchronously'を実行したい<= **いいえ、そうでない**あなただけ正しく非同期呼び出しを使用する方法がわかりません。上記の重複するリンクの答え、特に** ES2015 +という見出しを読んでください: 'sqllite.create'と' db.executeSql'が返すものに似ているthen()**で約束します。呼び出し元(getCustomerById)がそれにサブスクライブできるように、呼び出し元に約束を返す必要があります。 – Igor