【发布时间】:2012-09-17 14:53:58
【问题描述】:
无论传递的数字是否为素数,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 查询完成,所以我必须使用某种回调函数。但它没有用。
【问题讨论】:
-
将回调作为
primecheck的第二个参数传递,并执行callback(isprime)而不是return isprime。 (另外,您不需要选择大于sqrt(number)的素数)。
标签: javascript callback web-sql