如何从getAllInternetHeadersAsync获取返回值?

大数据文件

我创建了一个Office加载项,我想知道如何使用getAllInternetHeadersAsync获取Internet标头?我有以下代码,它将标头发送到控制台:

var headers = "";
// Get the internet headers related to the mail.
Office.context.mailbox.item.getAllInternetHeadersAsync(
     function(asyncResult) {
         if (asyncResult.status === Office.AsyncResultStatus.Succeeded) {
             headers = asyncResult.value;
             console.log(headers);

         } else {
            if (asyncResult.error.code == 9020) {
              // GenericResponseError returned when there is no context.
              // Treat as no context.
         } else {
              // Handle the error.
           }
       }
     }
  );
  console.log("headers = " + headers);

但是,标题似乎并没有被永久设置。第一个console.log显示标题的正确值。但是,最后一个console.log显示标题已恢复为空。如何设置标头,以便在getAllInternetHeadersAsync函数之后仍然可以看到标头?

谢谢!

迈克尔·吉尔

仔细看看您的控制台输出。您应该发现console.log("headers = " + headers)代码末尾输出显示console.log(headers)回调函数内部的输出之前

getAllInternetHeadersAsync()就像许多Office API函数一样,顾名思义,它是一个异步函数。当您调用该函数时,它会在获取标题之前立即返回。因此,函数调用之后的所有代码都将立即执行。但是您还没有标题!

稍后,该函数获取标头并调用您的回调函数现在您可以访问标题了。但是将这些标头存储在全局变量中并没有任何好处,因为您的其他代码不知道它们何时准备就绪。

相反,您需要做的是:无论您需要查看标头的任何代码,都应该位于回调函数内,或者位于您从回调代码调用的另一个函数中这样,您的代码将具有可用的标头。

这就是您必须使用名称处理每个Office API函数Async的方式。

就像@JaromandaX在评论中指出的那样,您可以使用Promiseand和async/ await,但是您必须创建Promise自己,因为Office API不会为您执行此操作-它仅使用回调。同样,使用async/await将限制您使用支持它的现代浏览器,或者如果需要支持Internet Explorer,则要求使用编译器将代码转换为ES5兼容代码。

对于Office API,仅坚持使用xyzAsync函数提供的回调系统,并且仅访问该asyncResult.value回调内部或您从该回调内部调用的另一个函数中,这是最简单的。

有关更多阅读,在Web上搜索异步javascript将找到许多文章,对此进行了详细说明。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章