- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的应用程序中,有时我通过 Promise 将如此多的微任务排队,导致 UI 被阻塞并变得无响应。
有什么方法可以以类似的方式将它们作为宏任务排队吗?使用 setTimeout() 工作正常,UI 再次变得响应,但代码非常丑陋,让我陷入回调 hell 。
提前致谢!
最佳答案
如果您排队的 promise 足够多,导致 UI 饥饿,因为 promise 的运行优先级高于许多其他类型的事件,那么您可能只是试图一次运行太多异步操作,或者以某种方式编写代码创造了太多必须安排并与其他事情竞争的 promise 。
解决此问题的正确方法可能是修复您的代码,这样它就不会尝试创建那么多 promise 。只有当您向我们展示实际导致该问题的代码时,我们才能帮助您。
Is there any way I can queue them as macrotasks in a similar way?
内置于 JS 中的 Promise 实现无法配置 Promise 的调度方式,因此它们被硬连接为使用比事件队列中的许多其他任务优先级更高的微任务,并且您无法更改它。
您可以获得一个第三方库(在 JS 内置 Promise 之前为 Promise 使用而构建的库),该库无法访问微任务系统,并且会使用诸如 setTimeout()
或setImmediate()
。但是,您必须以某种方式确保所有代码都切换到这个第三方库,而不是无意中使用内置实现。
老实说,这感觉像是一个彻底的黑客攻击,并不是我想要的解决方案。单线程JS是一个协作系统。为了保持 UI 响应,它依赖于一些合作,而不是用高优先级或长时间运行的操作来敲击主线程,以保持 UI 响应。
在某些情况下,您可以将一些代码移出到 webWorker(如果这是浏览器)或 WorkerThread(如果这是 Node.js),并将麻烦的代码从与 UI 相同的事件循环中取出。
但是,最好的解决方案可能是驯服您的 Promise 驱动的代码,这样它就不会连续运行太多 Promise 计划的事情,从而干扰 UI。如果您向我们展示实际导致问题的 promise 代码,我们只能帮助您提供一些如何做到这一点的想法。
关于Javascript 异步 promise 作为宏任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59207082/
如何从 promise 中退出 promise ? perl6 文档没有提供简单的方法。例如: my $x = start { loop { # loop forever until "qui
我的用户 Controller 中有一个索引操作,其中我试图连续做两件事,并且在它们都有机会完成之前不执行所需的 res.json() 方法。 我有一个加入用户的友谊加入模型。一列是 friender
请帮我解释一下为什么日志结果有两种不同: 方式 1:每 1 秒顺序记录一次 方式 2:1 秒后记录所有元素。 // Way 1 let sequence = Promise.resolve(); [1
我的问题很简单。 Promise.all() 方法可以返回 Promise 吗?让我解释一下: function simpleFunction() { let queue = [];
我正在使用 Promise 从存储中读取文件并转换为 base64 字符串。我有图像数组,使用 RNFS 读取图像 const promise_Images = _Images.map(async (
如果使用非空数组调用 Promise.all 或 Promise.race,它们将返回一个待处理的 Promise: console.log(Promise.all([1])); // prints
Promise.all 是否可以在没有包装 promise 的情况下返回链的最后一个值? 如果不使用 await,它在我的上下文中不起作用 没有包装的例子: function sum1(x){ r
我一直在玩 promise,通常能想出如何处理好它们,但在这种情况下,我不知道如何删除一个 promise-wrapping level。 代码如下: let promise2 = promise1.
考虑以下嵌套的Promises结构: const getData = async() => { const refs = [{ name: "John33", age: 3
我已经阅读了 Promise/A+ 规范,但据我了解,还有诸如 Promise/A 和 Promise 之类的东西。它们之间有什么区别? Promise 和 Promise/A 规范也是如此吗?如果是
当我运行以下代码时: my $timer = Promise.in(2); my $after = $timer.then({ say "2 seconds are over!"; 'result'
以下简单的 promise 是发誓的,我不允许打破它。 my $my_promise = start { loop {} # or sleep x; 'promise re
我正在尝试扩展Promise: class PersistedPromise extends Promise { } 然后在派生类上调用静态resolve以直接创建一个已解决的Promise: Per
我有两个返回 promise 的函数,我独立使用它们作为: getLocal().then(...) 和 getWeb().then(...) 但是现在我遇到了一个奇怪的问题: 1) 我需要第三个
我不知道 promise.all 解决方案中的 promise.all 是否是一个好的实践。我不确定。 我需要从一组用户获取信息,然后通过此信息响应,我需要发送消息通知。 let userList =
我一直在尝试使用 queueMicrotask() 函数,但我没有弄清楚当回调是微任务时回调的优先级如何。查看以下代码: function tasksAndMicroTasks() { const
我一直在尝试使用 queueMicrotask() 函数,但我没有弄清楚当回调是微任务时回调的优先级如何。查看以下代码: function tasksAndMicroTasks() { const
今年早些时候,我在 Pharo Smalltalk 参与了一个 promise 项目。这个想法是为了实现以下行为: ([ 30 seconds wait. 4 ]promiseValue )then:
大家好,提前感谢您的帮助。 下面是我正在尝试做的事情 function1(){ throw some error(); } function2() { // dosomething suc
我有以下未解析的代码。f2 解决了,所以我不会添加该代码,它是 f1 我有问题。 我调用函数,它到达最里面如果,它调用函数“find”,它执行函数 findId,完美返回 Id,然后执行 editId
我是一名优秀的程序员,十分优秀!