Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.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
Javascript 异步承诺阻塞DOM_Javascript_Performance_Asynchronous_Dom_Promise - Fatal编程技术网

Javascript 异步承诺阻塞DOM

Javascript 异步承诺阻塞DOM,javascript,performance,asynchronous,dom,promise,Javascript,Performance,Asynchronous,Dom,Promise,异步承诺没有像我在React中预期的那样工作(特别是React,但我认为这将适用于其他场景)。他们似乎仍在阻塞主线程,基本上冻结了我的浏览器 我有一个处理按钮点击的方法: onClick(){ console.time('factorial')) 阶乘(8000)//阶乘是罪魁祸首! .then(n=>this.setState({n})) console.endTime('factorial') }异步函数不是线程 当他们等待JavaScript事件循环之外的事情发生(比如HTTP响应到达)

异步承诺没有像我在React中预期的那样工作(特别是React,但我认为这将适用于其他场景)。他们似乎仍在阻塞主线程,基本上冻结了我的浏览器

我有一个处理按钮点击的方法:

onClick(){
console.time('factorial'))
阶乘(8000)//阶乘是罪魁祸首!
.then(n=>this.setState({n}))
console.endTime('factorial')

}
异步函数不是线程

当他们等待JavaScript事件循环之外的事情发生(比如HTTP响应到达)时,他们会暂停并放在后台

当它们运行时,它们仍在运行,并像任何其他函数一样绑定事件循环


如果要将某些处理分流到另一个线程,则需要使用。(至少在web浏览器的上下文中;节点具有)。

异步函数不是线程

当他们等待JavaScript事件循环之外的事情发生(比如HTTP响应到达)时,他们会暂停并放在后台

当它们运行时,它们仍在运行,并像任何其他函数一样绑定事件循环


如果要将某些处理分流到另一个线程,则需要使用。(至少在web浏览器的上下文中;Node有)。

您能告诉我们您的
factorial()
函数是如何编码的吗?如果它只是运行一个大的同步循环,然后解决了对您毫无好处的承诺。为了允许其他事物与其操作交错,它必须在计算周期之间将控制权返回给解释器。可以编写一个非阻塞、协作的阶乘实现,但听起来您的实现并不是这样。此外,您的行为就像DOM是执行的东西一样。DOM是一种数据结构。也许你指的是某个特定的DOM事件或活动?@jfriend00我承认,我撒谎了。代码的实现不是阶乘,而是一个函数,其任务是生成波形。下面是代码:是的,通过“阻止DOM”,我的意思是没有执行DOM事件。我的缺点是,我应该更具体一点。好吧,由于这里没有包括真实的信息(坦率地说误导了我们),你没有得到你能得到的那么好的答案,你基本上在这里浪费了人们的时间。请用你真正的目标发布你真正的代码。当人们向我们展示真正的代码和真正的问题时,我们的效率至少提高了10倍。理论问题常常被写问题的人的错误假设所掩盖,这使得我们无法提供最好的帮助。您显然展示了一些假设的同步
阶乘()
函数,该函数返回了一个承诺,并且确实基于一些错误的假设。这在现实世界中是不可能做到的(同步函数没有理由返回承诺),因此这个问题对于其他任何人来说都毫无用处。请发布真实代码和真实问题。是的,这是一个普遍的误解。您并不孤单,但在任何编程问题中,我们只能通过查看您的代码来为您的情况提供最佳建议。这并不是自私,而是具体和详细,这对每个人都有帮助。你能告诉我们你的
factorial()
函数是如何编码的吗?如果它只是运行一个大的同步循环,然后解决了对您毫无好处的承诺。为了允许其他事物与其操作交错,它必须在计算周期之间将控制权返回给解释器。可以编写一个非阻塞、协作的阶乘实现,但听起来您的实现并不是这样。此外,您的行为就像DOM是执行的东西一样。DOM是一种数据结构。也许你指的是某个特定的DOM事件或活动?@jfriend00我承认,我撒谎了。代码的实现不是阶乘,而是一个函数,其任务是生成波形。下面是代码:是的,通过“阻止DOM”,我的意思是没有执行DOM事件。我的缺点是,我应该更具体一点。好吧,由于这里没有包括真实的信息(坦率地说误导了我们),你没有得到你能得到的那么好的答案,你基本上在这里浪费了人们的时间。请用你真正的目标发布你真正的代码。当人们向我们展示真正的代码和真正的问题时,我们的效率至少提高了10倍。理论问题常常被写问题的人的错误假设所掩盖,这使得我们无法提供最好的帮助。您显然展示了一些假设的同步
阶乘()
函数,该函数返回了一个承诺,并且确实基于一些错误的假设。这在现实世界中是不可能做到的(同步函数没有理由返回承诺),因此这个问题对于其他任何人来说都毫无用处。请发布真实代码和真实问题。是的,这是一个普遍的误解。您并不孤单,但在任何编程问题中,我们只能通过查看您的代码来为您的情况提供最佳建议。这并不是自私,而是具体和详细,这对每个人都有帮助。