在JavaScript中顺序触发多个随机超时

在JavaScript中顺序触发多个随机超时,javascript,random,timeout,Javascript,Random,Timeout,我第一眼就知道(由于标题),这看起来像是“发帖前你有没有尝试搜索谷歌?”的问题之一,但我似乎找不到我遇到的具体问题的答案。对不起,如果我是个笨蛋。。。。还在学习:) 我需要在javascript中模拟暂停,但是setTimeout(函数调用,timeout)函数不适合我。原因是。。。调用setTimeout函数时,它会异步调用该函数 一点背景: 我试图模拟文本以随机时间间隔输入到div中。我希望它看起来像是一个人在用户查看页面时正在键入消息。由于超时是一个随机间隔,并且函数调用是异步进行的,因此

我第一眼就知道(由于标题),这看起来像是“发帖前你有没有尝试搜索谷歌?”的问题之一,但我似乎找不到我遇到的具体问题的答案。对不起,如果我是个笨蛋。。。。还在学习:)

我需要在javascript中模拟暂停,但是setTimeout(函数调用,timeout)函数不适合我。原因是。。。调用setTimeout函数时,它会异步调用该函数

一点背景:
我试图模拟文本以随机时间间隔输入到div中。我希望它看起来像是一个人在用户查看页面时正在键入消息。由于超时是一个随机间隔,并且函数调用是异步进行的,因此文本最终以随机顺序打印

以下是我到目前为止的一段经历:

typeString: function(s)
{
    for(var i=0;i<s.length;i++)
    {                      
        var c = s.charAt(i);
        var temp = setTimeout("MessageType.typeChar('" + c + "')", this.genRandomTime());
    }
}
typeString:函数
{

对于(var i=0;i您是否尝试累计设置超时?在循环外部粘贴一个变量,并将其初始化为0。现在我们将其称为超时。在循环的每个迭代开始时,向该变量添加一个随机的时间量,并使超时正常工作。这样,您可以确保调用函数顺序。

是否尝试累计设置超时?在循环外部粘贴一个变量,并将其初始化为0。现在我们将其称为超时。在循环的每次迭代开始时,向该变量添加一个随机时间量,并使超时正常工作。这样,您就可以确保函数正在执行按顺序启动。

您的问题是您正在使用一个计时器。从现在开始,您的所有时间都会延迟-下一个计时器需要在上一个计时器之后启动。只需将上一个计时器延迟添加到新计时器中即可

typeString: function(s)
{
    var delay = 0;
    for(var i=0;i<s.length;i++)
    {                      
        var c = s.charAt(i);
        delay = delay + this.genRandomTime();
        var temp = setTimeout("MessageType.typeChar('" + c + "')", delay );
    }
}
typeString:函数
{
var延迟=0;

对于(var i=0;i您的问题是您正在使用一个计时器。从现在开始,所有时间都会延迟-下一个计时器需要在上一个计时器之后启动。只需将上一个计时器延迟添加到新计时器中即可

typeString: function(s)
{
    var delay = 0;
    for(var i=0;i<s.length;i++)
    {                      
        var c = s.charAt(i);
        delay = delay + this.genRandomTime();
        var temp = setTimeout("MessageType.typeChar('" + c + "')", delay );
    }
}
typeString:函数
{
var延迟=0;

对于(var i=0;i,让每个事件处理程序从队列(数组、列表等)中抓取下一个字符,而不是将要显示的字符传递给每个计时器事件,这样可以保持顺序。

让每个事件处理程序从队列中抓取下一个字符,而不是将要显示的字符传递给每个计时器事件(数组、列表等),这样就保持了顺序。

我喜欢你的答案,因为它非常深入,但我必须赞扬斯图尔特B,因为他在你之前发布了它。西部套路中最快的老枪:(希望其他人会投票给你,并为你的友善和帮助赢得一些分数。谢谢你!!我喜欢你的答案,因为它非常深入,但我必须赞扬斯图尔特B,因为他在你之前发布了它。西部套路中最快的老枪:(希望其他人会投票给你,为你的友善和帮助赢得一些分数。谢谢你!!