gpt4 book ai didi

excel - Office-JS Excel API : problem properly chaining promises

转载 作者:行者123 更新时间:2023-12-04 20:28:05 25 4
gpt4 key购买 nike

我正在使用在桌面版 Excel 内的 IE11 框架中执行的直接(非转译)JS 构建 Excel 加载项。如果这很重要,我也使用 Vue 作为 UI 框架。我定义了以下两种方法(除其他外,但这两种是最短的,所以我将使用它们来演示我的问题):

protectSheet: function () {
return Excel.run(function (context) {
const sheet = context.workbook.worksheets.getActiveWorksheet();

return context.sync().then(function () {
sheet.protection.protect({
userInterfaceOnly: true,
drawingObjects: false
}); // allow inserting comments

return context.sync();
});
}).catch(function (error) {
console.log("error: " + error);
if (error instanceof OfficeExtension.Error) {
console.log("Debug info: " + JSON.stringify(error.debugInfo));
}
});
}


unProtectSheet: function () {
return Excel.run(function (context) {
const sheet = context.workbook.worksheets.getActiveWorksheet();
sheet.load("protection/protected");

return context.sync().then(function () {
if (sheet.protection.protected) {
sheet.protection.unprotect();
}

return context.sync();
});
}).catch(function (error) {
console.log("error: " + error);
if (error instanceof OfficeExtension.Error) {
console.log("Debug info: " + JSON.stringify(error.debugInfo));
}
});
}

然后我用以下方式调用它们,希望这意味着第二个函数只有在第一个函数完全完成后才开始执行:
onChange: function () {
this.unProtectSheet()
.then(this.protectSheet());
}

但是,第二个函数在第一个函数之后立即启动,而无需等待第一个函数完成。我显然错过了关于 Office-JS promise 如何工作(或一般 promise )的观点。我在这里做错了什么?

谢谢!

最佳答案

你很亲密。

但是,如果您使用 .then(funcName)语法,你必须只给出函数指针,而不是调用它。也就是说,而不是 .then(this.protectSheet()) , 删除 ()并将其保留为 .then(this.protectSheet) .

onChange: function () {
this.unProtectSheet()
.then(this.protectSheet);
}

或者,执行以下操作:
onChange: function () {
this.unProtectSheet()
.then(function() {
return this.protectSheet();
});
}

顺便说一句,你真的应该在最后有一个“.catch”,以捕捉任何一个函数中发生的任何错误。

...当然,使用 async/await 看起来会更干净(例如,通过 TypeScript 或 Babel 或其他方式进行编译)。

关于excel - Office-JS Excel API : problem properly chaining promises,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55930635/

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