如何解决如何从getAllInternetHeadersAsync获取返回值?
我创建了一个Office加载项,我想知道如何使用getAllInternetHeadersAsync获取Internet标头?我有以下代码,它将标头发送到控制台:
SELECT o.OpportunityID,n.NotesDate,n.NotesID
FROM Opportunity AS o
LEFT JOIN tblNotes AS n
ON n.OpportunityID = o.OpportunityID
AND n.NotesDate = (
SELECT MAX(n1.NotesDate)
FROM tblNotes n1
WHERE n1.OpportunityID = o.OpportunityID
)
ORDER BY o.OpportunityID;
但是,标头似乎并没有被永久设置。第一个console.log显示标题的正确值。但是,最后一个console.log显示标题已恢复为空。如何设置标头,以便在getAllInternetHeadersAsync函数之后仍可以看到标头?
谢谢!
解决方法
仔细查看您的控制台输出。您应该发现,在回调函数内部的console.log("headers = " + headers)
输出之前,在代码末尾显示console.log(headers)
输出。
像许多Office API函数一样,
getAllInternetHeadersAsync()
是一个异步函数,顾名思义。当您调用该函数时,它会在获取标题之前立即返回。因此,函数调用之后的所有代码都将立即执行。但是您还没有标题!
一小段时间后,该函数获取标头并调用您的回调函数。现在您可以访问标题了。但是将这些标头存储在全局变量中并没有任何好处,因为您的其他代码不知道它们何时准备就绪。
您需要做的是:您需要查看标头的任何代码都应该位于回调函数内部,或者位于您从回调代码调用的另一个函数中。这样,您的代码将具有可用的标头。
这是处理名称中带有Async
的每个Office API函数的方法。
正如@JaromandaX在评论中指出的那样,您可以使用Promise
和async
/ await
,但是您必须自己创建Promise
作为Office API不会为您执行此操作-它仅使用回调。同样使用async
/ await
会将您限制在支持它的现代浏览器中,或者如果需要支持Internet Explorer,则要求您使用编译器将代码转换为ES5兼容代码。
对于Office API,仅坚持使用xyzAsync
函数提供的回调系统,并且仅访问该回调内部的asyncResult.value
或您从该回调内部调用的另一个函数中,这是最简单的
要获取更多阅读信息,可以在网络上搜索asynchronous javascript来找到许多文章,对其进行详细说明。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。