如何防止 IE 在长时间 运行 脚本执行时冻结?

How to prevent IE from freezing while long running script execution?

我遇到了 Internet Explorer 在执行 运行 长任务时长时间冻结的问题。任务是使用 pdfmake 和 pure/vanilla javascript 生成大型 PDF 文档。所以,这意味着 我无法控制这个脚本的功能,我只是调用它:

function getPdf(docDefinition, filename) {
    var t = Date.now();
    return pdfMake.createPdf(docDefinition).download(fileName + '.pdf', function() {
        console.log('pdfMake.createPdf: \'' + fileName + '.pdf\' generated in: ' + (Date.now() - t) + 'ms');
    });
}

对于一些大型文档,它需要超过 30 秒,而我什么也做不了。

如何防止冻结,以便我可以显示一些旋转的等待图标或其他东西?

您可以使用async function returning a promise,pdf生成器完成他的工作后将解决。

ES5

您可以使用this promise polyfill

自版本 10 IE 支持 web-workers 允许 运行 JS 在与主线程不同的线程上。