以下のjavascriptプログラム(オイラー問題5)では、非同期・ノンブロッキング関数を書く練習をしています。プログラムは、1 ~ 10 の数字で割り切れる最小の数字を見つけようとしています。2520 が最初の最小値であり、プログラムはここで停止する必要があります。
関数が一緒に実行される場合、2 番目の checkNum が最初に実行され、2 番目が最初に出力され、次に最初が出力されるようにプログラムをセットアップしましたが、それは起こっていませんか?
関数を次々に実行するのではなく、同時に実行するにはどうすればよいですか? 私が呼び出す 2 番目の checkNum 関数からのコールバックが最初に呼び出されることを期待しています (答えの近くで開始されるため)、次に最初に呼び出されますが、それは起こりません。本当にありがとう!
var divides = function(a, b) {
return b % a == 0;
};
function checkNum(counter, callback) {
var noRemainder = 0;
var forward = true;
while (forward)
{
for (var i = 1; i <= 10; i++) {
if (divides(i, counter))
{ noRemainder++; }
}
if (noRemainder == 10) {
console.log(counter);
forward = false;
callback(counter);
} else {
console.log(noRemainder);
noRemainder = 0;
counter++;
console.log(counter);
}
}
}
checkNum(1, function(counter) {
setTimeout(function(){
console.log("The counter is: " + counter)},3000)
}
);
checkNum(2500, function(counter) {
setTimeout(function(){
console.log("The counter2 is: " + counter) },3000)
}
);