このようなスクリプトがあるとします
var a = getData();
function getData() {
if (some_condition) { // Do this }
else {// Do this }
return fetchFromDB(param);
}
function fetchFromDB(param) {
db.transaction(function (tx) {
tx.executeSQL("SELECT foo FROM bar WHERE column = ? ", [param], function (tx, res) {
return res.rows.item(0).foo
});
});
}
問題は tx.executeSQL が非同期であるため、fetchFromDB() メソッドが呼び出し元に undefined を返す、つまり getData()、同じ undefined が main 関数に返されることです。これを回避するには、次のように fetchFromDB() に 1 つのコールバックが必要です。
tx.executeSQL("SELECT foo FROM bar WHERE column = ? ", [param], function (tx, res) {
callBack1(res.rows.item(0).foo);
});
getData() に値が返されるようになりましたが、コールバック 1 からデータを返すメイン関数に戻るには、ここに 1 つのコールバック 2 が必要です。このように、私が呼び出した場所に対してコールバックが必要なようです。確かに私はここで何かが欠けています! 1 つのコールバックに制限するにはどうすればよいですか?