Primecheck 関数は、渡された数値が素数であるかどうかにかかわらず、true または false を返すことになっています。数が素数の場合、関数はそれを PRIMES テーブルに追加します。これはエラトステネスのふるいアルゴリズムですが、まだ完成していません。
function primecheck (number) {
var isprime = true;
if (number%10 == 1 || number%10 == 3 || number%10 == 7 || number%10 == 9) {
db.transaction(function (tx) {
tx.executeSql('SELECT * from Primes', [], function (tx, result) {
for (var i = 1; i < result.rows.length; i++) {
if (number%result.rows.item(i)['prime'] == 0) {
isprime = false;
break;
}
}
if (isprime) {
tx.executeSql('INSERT INTO PRIMES (prime) values (?)', [number]);
}
return isprime;
}, null);
}, null, null);
}
else {
isprime = false;
return isprime;
}
}
問題: 1、3、7、9で終わらない数字を渡すと、関数は true を返します。問題ありません。しかし、他の数値を渡すと、関数は未定義を返します。関数呼び出しが SQL クエリが終了するのを「待機」しないためだと思われるため、何らかのコールバック関数を使用する必要があります。しかし、うまくいきませんでした。