Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
等待setTimeout完成,然后返回值Javascript_Javascript_Html_Function_Delay - Fatal编程技术网

等待setTimeout完成,然后返回值Javascript

等待setTimeout完成,然后返回值Javascript,javascript,html,function,delay,Javascript,Html,Function,Delay,我正在做一个简单的骰子游戏,我已经设置了一个函数,可以随机生成数字并快速显示,以模拟骰子的滚动。我遇到的问题是,我想等到模拟完成后再返回值,但是值会立即返回。谁能给我指出正确的方向吗?基本上,我希望rollDie在继续之前等待Dice模拟完成 function rollDie(){ diceSimulation(); var result = Math.floor(Math.random() * 6) + 1; document.getElementById("r

我正在做一个简单的骰子游戏,我已经设置了一个函数,可以随机生成数字并快速显示,以模拟骰子的滚动。我遇到的问题是,我想等到模拟完成后再返回值,但是值会立即返回。谁能给我指出正确的方向吗?基本上,我希望rollDie在继续之前等待Dice模拟完成

function rollDie(){

     diceSimulation();
     var result = Math.floor(Math.random() * 6) + 1;
     document.getElementById("result").innerHTML = result;
     return result;

}

function diceSimulation(){
     for (var i = 0; i < 30; i++) {
         var random; 
         (function (i) {
             setTimeout(function () {
                 random = Math.floor(Math.random() * 6) + 1;
                 document.getElementById("result").innerHTML = random;
             }, 50*i);
         })(i);
     }
}
一种选择是,diceSimulation返回一个在50*31毫秒后解析的承诺,rollDie等待它:

现场演示:

异步函数rollDie{ 等待模拟; var结果=Math.floorMath.random*6+1; document.getElementByIdresult.innerHTML=结果; 返回结果; } 功能模拟{ 返回新PromiseSolve=>{ const result=document.getElementByIdresult; 对于设i=0;i<30;i++{ 设置超时=>{ 常数random=Math.floorMath.random*6+1; result.textContent=随机; },50*i; } setTimeoutresolve,1530; }; } 滚刀; 一种选择是,diceSimulation返回一个在50*31毫秒后解析的承诺,rollDie等待它:

现场演示:

异步函数rollDie{ 等待模拟; var结果=Math.floorMath.random*6+1; document.getElementByIdresult.innerHTML=结果; 返回结果; } 功能模拟{ 返回新PromiseSolve=>{ const result=document.getElementByIdresult; 对于设i=0;i<30;i++{ 设置超时=>{ 常数random=Math.floorMath.random*6+1; result.textContent=随机; },50*i; } setTimeoutresolve,1530; }; } 滚刀;
您可以使用回调或承诺来实现预期结果。 下面的一个简单示例显示了如何使用承诺作为解决方案:

let diceSimulation = () => {
console.log("Dice simulation complete");
};
let rollDie = new Promise((resolve,reject)=> {
resolve("Roll die is completed");
})

rollDie.then((message)=> {
    console.log(message);

    diceSimulation();
},
(fail)=> {

})

您可以使用回调或承诺来实现预期结果。 下面的一个简单示例显示了如何使用承诺作为解决方案:

let diceSimulation = () => {
console.log("Dice simulation complete");
};
let rollDie = new Promise((resolve,reject)=> {
resolve("Roll die is completed");
})

rollDie.then((message)=> {
    console.log(message);

    diceSimulation();
},
(fail)=> {

})

当我运行此程序时,在显示rollDie的结果后,模拟仍会运行。它几乎就像是在显示结果之后才进行模拟。如果更改i<30或},50*i,则必须适当地更改1530数字,否则,应该在for循环中的所有超时完成后调用resolve。实际上,既然最终操作与循环操作相同,为什么不完全忽略最终操作,从0到30而不是从0到29进行迭代呢?我没有做任何更改,只是粘贴了它,它就这样做了。我看到了显示的结果,然后我看到了模拟。看起来rollDie实际上返回的是[object Promise],而不是一个数字。为了使用承诺,你必须打电话给他们。然后点击他们或等待他们,如答案所示。见编辑,似乎工作得很好,我仍然有问题。我从另一个函数调用rollDie有关系吗?我需要再做一次等待吗?当我运行这个时,在我显示了rollDie的结果之后,模拟仍然会运行。它几乎就像是在显示结果之后才进行模拟。如果更改i<30或},50*i,则必须适当地更改1530数字,否则,应该在for循环中的所有超时完成后调用resolve。实际上,既然最终操作与循环操作相同,为什么不完全忽略最终操作,从0到30而不是从0到29进行迭代呢?我没有做任何更改,只是粘贴了它,它就这样做了。我看到了显示的结果,然后我看到了模拟。看起来rollDie实际上返回的是[object Promise],而不是一个数字。为了使用承诺,你必须打电话给他们。然后点击他们或等待他们,如答案所示。见编辑,似乎工作得很好,我仍然有问题。我从另一个函数调用rollDie有关系吗?我需要再做一次等待吗?
let diceSimulation = () => {
console.log("Dice simulation complete");
};
let rollDie = new Promise((resolve,reject)=> {
resolve("Roll die is completed");
})

rollDie.then((message)=> {
    console.log(message);

    diceSimulation();
},
(fail)=> {

})