【发布时间】:2021-05-18 02:30:22
【问题描述】:
您好,我的代码需要帮助。我对 Promises 不是很熟悉。我创建了一个名为 EmitRandomNumber() 的函数。在这个函数中,经过整整 2 秒(2000 毫秒),它会生成一个介于 0 到 100 之间的随机数。如果生成的随机数低于 80,我需要再次调用该函数,最多 10 次,直到生成随机数大于 80。
let attempt = 1;
let rN;
function EmitRandomNumber() {
return new Promise((resolve, reject)=> {
console.log(`Attempt #${attempt}. EmitRandomNumber is called.`);
setTimeout(()=>{
let randomNumber = Math.floor(Math.random() * 100) + 1;
rN = randomNumber;
console.log("2 seconds have passed.");
if(randomNumber>=80&&attempt<=10){
console.log(randomNumber,attempt);
resolve();
}else if(randomNumber<80&&attempt<=10){
attempt++;
console.log(`Random number generated is ${randomNumber}.`);
console.log("===============================");
EmitRandomNumber();
}
},2000);
});
}
let promise = EmitRandomNumber();
promise.then(()=>{
console.log(`Random number generated is ${rN}!!!!`);
console.log("===============================");
}).catch(()=>{
console.log("End");
});
我不知道我是否正确使用了 Promise,有时当它高于 80 时,它不会执行解析中的任何代码。你能帮我解决我的代码吗?谢谢!
【问题讨论】:
-
所以如果数字不好,您是否希望它再等 2 秒再重试?还是应该立即进行新尝试(在 2 秒标记处)?
-
如果生成的数字低于 80,则 2 秒后我生成另一个数字,直到它达到尝试 #10 或高于 80 的数字
-
你永远不会在 else 分支中调用
resolve()。 stackoverflow.com/questions/49014833/…stackoverflow.com/a/53032742/1048572