gpt4 book ai didi

Javascript - 使用 setTimeOut() promise 执行 "background proccessing"

转载 作者:行者123 更新时间:2023-12-01 03:45:52 24 4
gpt4 key购买 nike

我正在学习 Promise。我尝试使用 setTimeOut(function(){}, 0)进行后台处理。经过搜索,我发现这一切都会打破同步流程。在其他代码运行之前它不会运行。

下面的帖子说 setTimeOut(function, 0) 函数将同步运行。然而,我发现如果我在 promise 中使用它,情况并非如此。文章写道“setTimeout(function(){...}, 0) 只是将代码排队以在当前调用堆栈执行完毕后运行。这对于某些事情很有用。”。但是,如果编写在 Promise 内,则代码将在后台运行,而 javascript 会执行其余代码。

Is setTimeout a good solution to do async functions with javascript?

如果我在函数 setTimeOut(function(){somecode..}, 0) 中使用一些代码,在 promise 中,它会作为后台进程运行吗?我这样做是为了测试它。

如果我点击正文,我们会检查 testPromise 是否已解决。如果有,请附加消息“Msge that come after”。页面加载后,消息“Msge that comes before”就会显示。如果我刷新页面并单击正文,很快,单击和页面上消息的显示之间会出现延迟。这一定是因为 for 循环尚未完成。当我刷新后快速点击页面时。但是,如果我刷新页面并等待一段时间才能单击,则消息会消失。这一定是因为 for 循环在后台运行......仪式?我认为目前还没有这样做的实际理由。我只是想了解正在发生的事情。谢谢! Promise 的使用只是为了更好地组织异步函数吗?

let $body = $('body');
$body.prepend('<p>first</p>');

let testPromise = new Promise(function (resolve, reject) {
setTimeout(function () {
let testArray = [];
let testArray2 = [];
for (i = 0; i <= 99999999; i++) testArray.push(5);
for (j = 0; j <= 99999999; j++) testArray2.push(5);
resolve();
}, 0);
});

$body.on('click', function () {
testPromise.then(function () {
$body.append('<p>Msge that comes After</p>');
});
});

$body.append('<p>Msge that comes Before</p>');

最佳答案

您的问题已在您链接的帖子中得到解答:

setTimeout(function(){...}, 0) simply queues the code to run once the current call stack is finished executing. This can be useful for some things.

So yes, it's asynchronous in that it breaks the synchronous flow, but it's not actually going to execute concurrently/on a separate thread. If your goal is background processing, have a look at webworkers. There's also a way to use iframes for background processing.

TLDR: All backgrounded/concurrent code happens asynchronously, but not all asynchronous code is happening concurrently.

Promise 只是一种避免回调 hell 的机制。 (参见here)。

关于Javascript - 使用 setTimeOut() promise 执行 "background proccessing",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43576252/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com