此上下文丢失,并且在OfficeJS方法回调中未定义asyncResult.context

问题描述 投票:0回答:1

我缺少明显的东西。将Office.js与TypeScript一起使用时,尝试执行提供给某些函数(如makeEwsRequestAsync(data, callback))的回调参数的方法时,在此callback()中调用的所有局部函数(或相应的变量)都将返回未定义状态,从而导致“ [ C0]”错误。

我认为这是由于在xyz Is not a function函数的上下文中执行时this发生了变化。如何在没有makeEwsRequestAsync(data, callback)的情况下显式传递这些函数或参数?还是我的假设不正确,而其他原因导致了此问题?

this

我也尝试使用 sendRequest() { Office.context.mailbox.makeEwsRequestAsync( this.getSubjectRequest(Office.context.mailbox.item.itemId), this.callback); } callback(asyncResult) { let result = asyncResult.value; //Result processing happens here // \/ This throws "PostFile is not a function" this.PostFile(base64String); } PostFile(base64String: string) { //POST happens here } 的可选“ userContext”参数,如下所示:

makeEwsRequestAsync

然后通过回调中的outerThis: thisService sendRequest(folderId: string) { this.folderId = folderId; Office.context.mailbox.makeEwsRequestAsync( this.getSubjectRequest(Office.context.mailbox.item.itemId), this.callback, this.outerThis); } 检索上下文,但是该上下文未按预期填充,并返回asyncResult.context。实际上,“ asyncResult”对象中的唯一属性是“ value”和“ status”,而不是“ value”和“ context”。

谢谢,谢谢您的帮助

typescript office-js
1个回答
0
投票
我如何在没有此情况下显式传递这些函数或参数?
这被称为绑定您想要的内容,您可以通过两种方式将其存档:

使用.bind()方法:

undefined

或借助箭头功能(自动绑定):

 sendRequest() {
   Office.context.mailbox.makeEwsRequestAsync(
     this.getSubjectRequest(Office.context.mailbox.item.itemId), this.callback.bind(this));
 }
callback() {/*...*/}

或非常古老的方式(不推荐):

sendRequest() {
   Office.context.mailbox.makeEwsRequestAsync(
     this.getSubjectRequest(Office.context.mailbox.item.itemId), this.callback);
 }
callback = (asyncResult) => {
   let result = asyncResult.value;

   //Result processing happens here

   // \/ This throws "PostFile is not a function"
   this.PostFile(base64String);
 }

然后在回调中使用const that = this 而不是that

© www.soinside.com 2019 - 2024. All rights reserved.