【发布时间】:2020-02-26 10:48:54
【问题描述】:
我正在开发一个 Word 插件(Word API + Office.js),我正在使用内容控件,我正在尝试检查控件是否为空白,如果它为空白,我正在尝试设置一个标志“假”。
但由于异步性质,执行将移至下一行,而没有完全执行 CheckMandatoryFields 方法,因此强制标志始终为真。
有什么办法可以等到CheckMandatoryFields的执行完成
var mandatoryflag = "True";
function Test()
{
CheckMandatoryFields();
if (mandatoryflag)
{
document.getElementById('lblstatus').innerText += "Success" + " ";
}
}
function CheckMandatoryFields() {
var MadatoryFieldsList = ["Control1","Control2"];
$.each(MadatoryFieldsList, function (index, element) {
Word.run(function (context) {
var contentControls = context.document.contentControls.getByTag(element).getFirst();
contentControls.load('text');
return context.sync().then(function () {
var text = contentControls.text;
if (text == "") {
document.getElementById('lblstatus').innerText += element + " is Mandatory" + " ";
mandatoryflag = "False";
}
})
});
});
}
【问题讨论】:
-
设计
CheckMandatoryFields以返回一个 Promise。然后将后面的代码放在then()方法中。此外,在循环中使用Word.run通常不是一个好习惯。尝试在Word.run内循环遍历数组。 -
@RickKirkham with word.run 是否有可能返回一个承诺?我对此感到困惑
-
@Common_Coder 你可以'Promisify'回调函数,看看here
-
@RickKirkham Word Api 是否支持承诺?
标签: office-js office-addins word-web-addins