目标:
我正在探索用于Office的Javascript API(用于Office 2013(,但遇到了一个奇怪的问题。我似乎无法将变量返回到函数链的上游。例如,API提供了一种检查和查看当前与文档相关联的所有绑定的方法,使用以下方法:
Office.context.document.bindings.getAllAsync(function (asyncResult) {});
我正试图在函数中使用它来获取作为变量的数据,这样我就可以调用某些绑定。
问题:
我可以在API调用的最内层函数中调用显示函数,并使用它来显示结果。不过,我似乎无法向上返回数据。
我尝试过的:
我已经尝试在包装器函数中,在API调用之外声明一个变量。我试着做了两次退货声明。我觉得这应该有效:
function getBindings () {
var bindingString;
Office.context.document.bindings.getAllAsync(function (asyncResult) {
for (var i in asyncResult.value) {
bindingString += asyncResult.value[i].id;
}
});
return 'Bindings: '+bindingString[0];
}
不幸的是,它只返回这个:
Bindings: undefined
我知道在最里面的函数中,我有数据,因为我已经从里面调用了显示函数,并将绑定写入了页面。因此,我可以创造一个隐藏的容器,填充然后阅读。不过我觉得那会是一次黑客攻击。
问题:
是否有更好的方法返回变量?
Benjamin Gruenbaum对此进行了评论,因此我将其添加到此处,以便于查找,以防其他人遇到此问题。
不能返回异步调用的响应同步地(它还没有出现(,所以您用它调用一个方法value,在该方法中,您可以使用它的值-这被称为延续传球风格。或者,您可以返回对象而不是对象本身,然后在通过
then
方法准备,这被称为promise
因此,不幸的是,答案是无法做到这一点。