Javascript 使函数调用等待web SQL查询
无论传递的数字是否为素数,Primecheck函数都应该返回true或false。如果数字是素数,则函数将其添加到素数表中。 这是一个Eratosthenes算法的筛选,但它还没有完成Javascript 使函数调用等待web SQL查询,javascript,callback,web-sql,Javascript,Callback,Web Sql,无论传递的数字是否为素数,Primecheck函数都应该返回true或false。如果数字是素数,则函数将其添加到素数表中。 这是一个Eratosthenes算法的筛选,但它还没有完成 function primecheck (number) { var isprime = true; if (number%10 == 1 || number%10 == 3 || number%10 == 7 || number%10 == 9) { db.transac
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;
}
}
功能预检查(编号){
var isprime=真;
如果(数字%10==1 | |数字%10==3 | |数字%10==7 | |数字%10==9){
数据库事务(功能(tx){
tx.executeSql('SELECT*from Primes',[],函数(tx,result){
对于(变量i=1;i
问题:当我传递不以1、3、7、9结尾的数字时,函数返回true,就可以了。
但当我传递其他数字时,函数返回undefined。我想这是因为函数调用不会“等待”SQL查询完成,所以我必须使用某种回调函数。但是它不起作用。如果您的函数执行异步操作,它将无法基于这些异步操作的结果返回值。(这是因为,由于JavaScript的单线程特性,异步函数在当前执行完成之前不会运行。)相反,您的函数应该期望一个回调函数,该函数将可能返回的值作为参数 您当前调用的函数如下所示:
var isprime = primecheck(someNum);
// now do something with isprime
但您需要使用回调:
primecheck(someNum, function(isprime) {
// now do something with isprime
});
只需添加第二个回调参数,并调用该回调,而不是使用返回
:
function primecheck (number, callback) {
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) {
//....
callback(isprime);
}, null);
}, null, null);
}
else {
isprime = false;
callback(isprime);
}
}
现在,
primecheck
不返回任何内容,但是只要primecheck
确定输入的素性,传递到primecheck
中的回调函数将以isprime
作为其第一个参数启动。将回调作为primecheck
的第二个参数传递,并执行callback>(iPrime)
而不是返回iPrime
(另外,您不需要选择大于sqrt(number)
)的素数)。