gpt4 book ai didi

javascript - spin.js 在长时间运行的任务中没有出现,但在我单步执行调试器时出现

转载 作者:行者123 更新时间:2023-11-30 17:14:35 26 4
gpt4 key购买 nike

我正在使用 spin.js在长时间运行的处理任务中。

当我刚刚运行任务时,我在任务运行之前立即进行的 UI 更改不会在任务本身期间显示。但是,当我使用调试器手动逐步完成该过程时,UI 会按预期更新。是什么赋予了?我尝试在长时间运行的函数上运行 setTimeout 来让 UI 有时间更新;没有骰子。

function updateGraphDisplay() {
var opts = {
lines: 13, // The number of lines to draw
length: 20, // The length of each line
width: 10, // The line thickness
radius: 30, // The radius of the inner circle
corners: 1, // Corner roundness (0..1)
rotate: 0, // The rotation offset
direction: 1, // 1: clockwise, -1: counterclockwise
color: '#000', // #rgb or #rrggbb or array of colors
speed: 1, // Rounds per second
trail: 60, // Afterglow percentage
shadow: false, // Whether to render a shadow
hwaccel: false, // Whether to use hardware acceleration
className: 'spinner', // The CSS class to assign to the spinner
zIndex: 2e9, // The z-index (defaults to 2000000000)
top: '50%', // Top position relative to parent
left: '50%' // Left position relative to parent
};

var spinner = new Spinner(opts).spin();
$('#chart').append(spinner.el);

// long running local computations (~4s)

Highcharts.charts[0].series[0].setData(sentimentDataPoints);
Highcharts.charts[0].series[1].setData(volumeDataPoints);

spinner.stop();
}

最佳答案

你要记住JS是单线程的。当你使用 setTimeout(fn, delay) 时发生的事情是,JS 将函数 fn 排入队列以在未来运行大约 delay 毫秒,然后继续运行 setTimeout() 之后的行。

这意味着您的 updateGraphDisplay() 函数将运行完成,包括创建微调器,然后在几毫秒后将其删除。因此您看不到它更新的原因。

相反,您需要做的是将“长时间运行的本地计算”之后的所有内容移动到传递给 setTimeout() 的函数中,这样它就会在该代码之后执行已经运行在未来。

缩写代码结构示例:

 // initialisation code
// create spinner and append to DOM
setTimeout(function () {
// do calculations
// update graph
// clear spinner
}, 0); // even a delay of 0 will work

关于javascript - spin.js 在长时间运行的任务中没有出现,但在我单步执行调试器时出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26352074/

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