1

目标:

我正在探索适用于 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

我知道在最里面的函数内部,我有数据,因为我已经从内部调用了我的显示函数,并将绑定写入页面。因此,我可以创建一个隐藏的持有 `,我填充然后阅读。我觉得那将是一个黑客攻击。

问题:

有没有更好的方法来返回变量?

4

1 回答 1

0

Benjamin Gruenbaum作为评论回答了这个问题,所以我在这里添加它是为了方便查找,以防其他人遇到这个问题。


不能同步返回异步调用的响应(它还没有),因此您调用具有该值的方法,在该方法中,您可以使用它的值 - 这称为延续传递样式。或者,您可以返回对象的代理而不是对象本身 - 然后通过then方法准备好使用它,这称为承诺


所以不幸的是,答案是无法做到。

于 2014-09-19T21:27:28.170 回答