1

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

但由于异步性质,执行将移至下一行,而没有完全执行 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";
                    }
                })
            });

        });      

    }
4

1 回答 1

1

Officejs 方法的 Promisification 示例:

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
})
于 2020-02-27T10:20:09.140 回答