Office js 是否可以等到当前方法的执行完成
我正在开发一个Word插件(Word API+Office.js),在这里我正在使用内容控件,我尝试检查控件是否为空,如果为空,我尝试将标志设置为“False” 但是,由于异步特性,执行将移动到下一行,而没有完全执行CheckMandatoryFields方法,因此mandatoryflag始终为true 有没有办法等到CheckMandatoryFields的执行完成Office js 是否可以等到当前方法的执行完成,office-js,office-addins,word-web-addins,Office Js,Office Addins,Word Web Addins,我正在开发一个Word插件(Word API+Office.js),在这里我正在使用内容控件,我尝试检查控件是否为空,如果为空,我尝试将标志设置为“False” 但是,由于异步特性,执行将移动到下一行,而没有完全执行CheckMandatoryFields方法,因此mandatoryflag始终为true 有没有办法等到CheckMandatoryFields的执行完成 var mandatoryflag = "True"; function Test() { C
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";
}
})
});
});
}
Officejs方法的示例说明:
设计
CheckMandatoryFields
以返回承诺。然后将后面应该出现的代码放入Then()
方法中。另外,在循环中运行Word.run通常不是一个好的做法。尝试在Word.run
@RickKirkham和Word.run中循环遍历数组。是否可以返回承诺??我对这件事感到困惑this@Common_Coder您可以“Promisify”回调函数,看看@RickKirkham Word Api是否支持promise?promise在Word Api 1.3中是否有效??当我试图创造一个承诺时,我变得不明确了error@Common_Coder该错误意味着您的加载项正在IE中运行,而IE本机不支持承诺。Office有一个可供您使用的软件。只需将此代码添加到JavaScript文件的顶部:if(!window.Promise){window.Promise=Office.Promise;}
有关示例,请参阅。
private getToken = (): Promise<string> => {
return new Promise((resolve, reject) => {
Office.context.mailbox.getCallbackTokenAsync(
{},
(asyncResult): void => {
if (asyncResult.status === Office.AsyncResultStatus.Succeeded) {
resolve(asyncResult.value)
} else {
reject("GetCallbackToken failed")
}
})
})
}
getToken().then(res => {
// Do stuff with token
}).catch(err => {
// Handle error
})