首页 > 解决方案 > MS Office 加载项、JavaScript 和 async/await

问题描述

我目前正在努力加快为 Excel 编写加载项的速度,并且已经对该主题进行了大量阅读,并且正在关注这个优秀的教程系列

在示例中,演示者使用的是 TypeScript,但是,我正在处理的当前项目需要 JavaScript。

我已经在 Visual Studio 2019 社区版而不是 Script Lab 的 JavaScript Excel Web 加载项项目中复制了该示例,并且在 Desktop Excel 上调试加载项似乎工作正常。

我的问题是在我的 JavaScript 版本中使用 TypeScript 示例的 async/await 语法时出现的,因为调试器在我使用它时会引发语法错误。对 JS 中的异步编程没有太多经验,我从一开始就可以看出为什么 async/await 比嵌套回调或 Promises 更容易使用。链接thens对我来说看起来很痛苦,如果可以的话,我宁愿使用 async/await。

让我纠结了一阵子的是 JavaScript 显然确实支持 async/await。所以,我现在唯一能想到的是,Excel 运行的 JavaScript 版本是 ECMAScript 8 之前的版本。我找不到任何在 JS 中使用 async/await 的 Office.js 加载项示例。我不知道架构是如何连接在一起的,但如果有人能证实这一点,我将不胜感激,因为我宁愿听到 JavaScript 版本有问题,因此我无能为力,只能在错误的情况下继续假设并错过使用 async/await 的机会。[旁注:我也知道 OfficeExtension.Promise 但这仍然令人讨厌)。

提前致谢。

标签: javascriptexcelasync-awaitoffice-jsoffice-addins

解决方案


如果您从 await/async 收到语法错误,那么您可能正在测试使用 IE 作为浏览器的 Office 版本。(有关在各种版本的 Office 上使用哪种浏览器的信息,请参阅Office 插件使用的浏览器。)IE 本身不支持 ES5 之后的任何 JavaScript 版本,因此它无法识别 async/await(或 Promises)。当浏览器是 IE 时,要使用 ES6+ 的这些特性,您需要加载一个 polyfill,或者使用 tsc 或 babel 之类的转译器将 ES6+ 代码转译为 ES5 代码。


推荐阅读