私のWeb SQLデータベースからSELECTSの値を取得しようとしています。 SELECTED値を親関数内の変数に戻したいと思います。しかし、変数は常に空白を返し、グローバルであるかどうかを判断します。Web SQL SELECTトランザクションの戻り値
selectRow関数内でconsole.logが表示されるので、データベースクエリから正しい値がログに記録されますが、console.logはinitDB関数に空白で表示されます。
また、selectRow関数内のログの前に空白のログが表示されることに気付きました。私は、人々が非同期のデータベーストランザクションについて話しているフォーラムを見つけました。私はこれが私の変数が返されている理由が空であることを理解します。しかし、何度も壁に頭を打つと、私はまだこの非同期問題を回避する方法を見つけることができません。あなたは応答遅れを持っているので、
/** Initialize Database **/
function initDB(){
createTable();
selectRow("SELECT * FROM planets;", function(pleaseWork) {
console.log(pleaseWork);
// any further processing here
});
}
/** Select Row from Table **/
function selectRow(query, callBack){ // <-- extra param
var result = [];
db.transaction(function (tx) {
tx.executeSql(query, [], function(tx, rs){
for(var i=0; i<rs.rows.length; i++) {
var row = rs.rows.item(i)
result[i] = { id: row['id'],
name: row['name']
}
}
console.log(result);
callBack(result); // <-- new bit here
}, errorHandler);
});
}
ありがとうございました。コールバックは私のための新しいコンセプトですが、私はそれらについてもっと知っています。 –
コールバックは、javascriptで始まるときに慣れるのが最も難しい概念です – drinovc