Office js 是否可以等到当前方法的执行完成

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

我正在开发一个Word插件(Word API+Office.js),在这里我正在使用内容控件,我尝试检查控件是否为空,如果为空,我尝试将标志设置为“False”

但是,由于异步特性,执行将移动到下一行,而没有完全执行CheckMandatoryFields方法,因此mandatoryflag始终为true

有没有办法等到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";
                    }
                })
            });

        });      

    }
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
})