浏览器中运行Excel.run:嵌套JS函数未执行最内层代码问题
模拟Excel.Run时异步回调未执行的问题
我正在尝试让Office Add-In能在浏览器的Excel环境外运行,为此会检查Office和Excel变量是否已定义,未定义时就创建模拟变量来保证代码运行(我清楚实际依赖这些函数的功能时代码会报错,目前仅需在Edge浏览器的Office环境外做测试)。这个问题本质和Excel无关,核心是我对async函数及函数对象的理解有欠缺。
我把代码精简成了最小可复现示例(MVCE),现在的问题是:预期执行的console.log("commandsfunc");完全没运行,代码既不报错也没进入这段逻辑。
代码示例
index.html
<html> <head> <title>My External JavaScript Code!!!</title> <script type="text/javascript" src="test.js"> </script> </head> <body> </body> </html>
test.js
var Excel = {} Excel.run = async function (context) { console.log('Excel.Run') var context = {} return context } CommandsFunc(event) async function CommandsFunc(event) { console.log('Excel') console.log(Excel) await Excel.run(async (context) => { //Start Func. console.log("commandsfunc"); //End Func }); console.log('Out') }
问题原因及解决方法
问题出在模拟的Excel.run函数上:你调用Excel.run时传入了一个异步回调函数,但这个模拟函数根本没执行传入的回调。原版Excel.run的逻辑是接收一个回调,把context传给回调并执行它,你的模拟实现漏掉了这一步。
修改后的Excel.run应该像这样:
Excel.run = async function (callback) { console.log('Excel.Run') var context = {} // 执行传入的回调函数,并传入context await callback(context); return context }
另外,调用CommandsFunc(event)时event变量未定义,会在控制台弹出警告,但这不是回调未执行的原因,若不需要可以直接改成CommandsFunc()。
内容的提问来源于stack exchange,提问作者FreeSoftwareServers
相关产品推荐
相关产品推荐

