Primecheck 함수는 전달 된 숫자가 소수인지 아닌지 여부를 true 또는 false로 반환해야합니다. 숫자가 소수 일 경우 함수는이를 PRIMES 테이블에 추가합니다. 이것은 시브 오브 에라토스테네스 알고리즘이지만 아직 완료되지 않았습니다.웹 SQL 쿼리를위한 함수 호출 대기
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'의 두 번째 인수로 콜백을 전달하고'return isprime' 대신'callback (isprime)'을 실행하십시오. (또한'sqrt (number)'보다 큰 소수를 선택할 필요가 없습니다. – DCoder