我缺少明显的东西。将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”。
谢谢,谢谢您的帮助
这被称为绑定您想要的内容,您可以通过两种方式将其存档:使用.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
。