我正在自学异步JS,并编写了一个小型测试程序来帮助我更好地了解其工作原理。
我对这段代码的期望是,由于我在函数“ TestPrime()”中添加了延迟,因此偶数测试会不按顺序进行。但是,代码运行时,数字按顺序运行。换句话说,我期待的事情大致如下:
3是质数 5是素数 2是素数 ...
async function TestPrime(num) {
for(var i = 2; i < num; i++){
let res = num % i;
if (num % 2 == 0) {
setTimeout(()=>{}, 1500);
}
if (res == 0) {
return ({number: num, prime: false});
}
}
return ({ number: num, prime: true});
}
const f = ()=>{
for (var i = 2; i <= 50; i++){
if (TestPrime(i).then(p => {
if (p.prime)
console.log('%s is prime', p.number);
else
console.log('%s is NOT prime', p.number);
}));
}
}
f();
我敢肯定这只是异步JS编程的菜鸟误解,但如果有人可以让我直言不讳,我将非常有义务。
非常感谢!
答案 0 :(得分:3)
setTimeout(()=>{}, 1500);
什么都不做。实际上,这是一个不可操作的操作。
如果要延迟异步方法,则可以如下定义延迟方法:
const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
这将返回一个Promise
,该毫秒在ms
毫秒后解析。
它可以如下使用:
async function foo(){
// do something
await delay(1500);
// do something else
}
答案 1 :(得分:2)
您唯一要延迟的是调用serialCount = serialCount.replace(/[AS]/g, '');
,此功能不执行。
()=>{}
不是睡眠功能。这就是异步的意义:其他所有事情都可以继续进行而无需等待。
要实际延迟,您需要停止兑现承诺,直到超时完成。
使用经典的Promise语法,如下所示:
setTimeout