How to get a return value from getAllInternetHeadersAsync?(如何从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函数一样,顾名思义,它是一个异步函数。当您调用该函数时,它会在获取标头之前立即返回。因此,函数调用之后的任何代码都将在此时此地执行。但是您还没有标题!
一小段时间后,该函数获取标头并调用您的回调函数。现在您可以访问标题了。但是将这些头文件存储在全局变量中没有任何好处,因为您的其他代码不知道它们什么时候准备好了。
您需要做的是:您需要查看头的任何代码都应该在回调函数中,或者在您从回调代码调用的另一个函数中。这样,您的代码将具有可用的标头。
这是您必须处理名称中包含Async
的每个Office API函数的方式。
Promise
和async
/await
,但是您必须自己创建Promise
,因为Office API不会为您做这件事-它只使用回调。另外,使用async
/await
将限制您只能使用支持它的现代浏览器,或者如果您需要支持Internet Explorer,则需要使用编译器将代码转换为ES5兼容的代码。
对于Office API,最简单的方法是坚持使用xyzAsync
函数提供的回调系统,并且只访问该回调内的asyncResult.value
或从回调内调用的另一个函数。
有关更多阅读信息,请在Web上搜索asynchronous javascript,将找到许多详细说明这一点的文章。
这篇关于如何从getAllInternetHeadersAsync获取返回值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何从getAllInternetHeadersAsync获取返回值?


- 400或500级别的HTTP响应 2022-01-01
- 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06
- Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01
- addEventListener 在 IE 11 中不起作用 2022-01-01
- CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01
- Flexslider 箭头未正确显示 2022-01-01
- Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
- 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01
- Fetch API 如何获取响应体? 2022-01-01
- 失败的 Canvas 360 jquery 插件 2022-01-01