如何从 getAllInternetHeadersAsync 获取 return 值?
How to get a return value from getAllInternetHeadersAsync?
我创建了一个 Office add-in,我想知道如何使用 getAllInternetHeadersAsync 访问 Internet headers?我有以下代码,它将 headers 发送到控制台:
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);
但是,headers 似乎没有得到永久设置。第一个 console.log 显示 headers 的正确值。然而,最后的 console.log 显示 headers 已返回空。如何设置 headers 以便在 getAllInternetHeadersAsync 函数之后我仍然可以看到它?
谢谢!
仔细查看您的控制台输出。您应该发现代码末尾的 console.log("headers = " + headers)
输出显示在回调函数内部的 console.log(headers)
输出 之前 。
getAllInternetHeadersAsync()
与许多 Office API 函数一样,是一个 异步 函数,顾名思义。当您调用该函数时,它会立即 returns,然后再获得 headers。所以函数调用之后的任何代码都会立即执行。但是您还没有headers!
稍后,该函数获取 headers 并 调用您的回调函数 。现在您可以访问 headers。但是将这些 headers 存储在全局变量中没有任何好处,因为您的其他代码不知道它们何时准备就绪。
您需要做的是:您需要查看 headers 的任何代码都应该在回调函数中,或者在您 调用的另一个函数中 来自回调代码。这样你的代码就会有 headers 可用。
这就是您必须如何处理名称中带有 Async
的每个 Office API 功能。
正如@JaromandaX 在评论中指出的那样,您可以使用 Promise
和 async
/await
,但您必须自己创建 Promise
作为Office API 不会为您做这件事——它只是使用回调。此外,使用 async
/await
会限制您使用支持它的现代浏览器,或者如果您需要支持 Internet Explorer,则需要您使用编译器将代码转换为 ES5 兼容代码。
对于 Office APIs,最简单的方法是坚持使用 xyzAsync
函数提供的回调系统,并且只在该回调或另一个函数中访问 asyncResult.value
您从回调内部调用的。
如需更多阅读,网络搜索 asynchronous javascript 会找到许多对此进行更详细解释的文章。
我创建了一个 Office add-in,我想知道如何使用 getAllInternetHeadersAsync 访问 Internet headers?我有以下代码,它将 headers 发送到控制台:
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);
但是,headers 似乎没有得到永久设置。第一个 console.log 显示 headers 的正确值。然而,最后的 console.log 显示 headers 已返回空。如何设置 headers 以便在 getAllInternetHeadersAsync 函数之后我仍然可以看到它?
谢谢!
仔细查看您的控制台输出。您应该发现代码末尾的 console.log("headers = " + headers)
输出显示在回调函数内部的 console.log(headers)
输出 之前 。
getAllInternetHeadersAsync()
与许多 Office API 函数一样,是一个 异步 函数,顾名思义。当您调用该函数时,它会立即 returns,然后再获得 headers。所以函数调用之后的任何代码都会立即执行。但是您还没有headers!
稍后,该函数获取 headers 并 调用您的回调函数 。现在您可以访问 headers。但是将这些 headers 存储在全局变量中没有任何好处,因为您的其他代码不知道它们何时准备就绪。
您需要做的是:您需要查看 headers 的任何代码都应该在回调函数中,或者在您 调用的另一个函数中 来自回调代码。这样你的代码就会有 headers 可用。
这就是您必须如何处理名称中带有 Async
的每个 Office API 功能。
正如@JaromandaX 在评论中指出的那样,您可以使用 Promise
和 async
/await
,但您必须自己创建 Promise
作为Office API 不会为您做这件事——它只是使用回调。此外,使用 async
/await
会限制您使用支持它的现代浏览器,或者如果您需要支持 Internet Explorer,则需要您使用编译器将代码转换为 ES5 兼容代码。
对于 Office APIs,最简单的方法是坚持使用 xyzAsync
函数提供的回调系统,并且只在该回调或另一个函数中访问 asyncResult.value
您从回调内部调用的。
如需更多阅读,网络搜索 asynchronous javascript 会找到许多对此进行更详细解释的文章。