Javascript/Typescript';这';范围
我正在与Ionic2和Meteor合作。但是,我确实有一个与Javascript/Typescript';这';范围,javascript,typescript,Javascript,Typescript,我正在与Ionic2和Meteor合作。但是,我确实有一个与这个对象的范围相关的Javascript/Typescript问题 当我没有适当级别的此句柄时,我必须使用bind 我可能不理解这个概念,因为我尝试了以下方法,但在尝试调用函数时出错 this.subscribe('messages', this.activeChat._id, this.senderId, () => { this.autorun(() => { let promiseMessage
这个
对象的范围相关的Javascript/Typescript问题
当我没有适当级别的此
句柄时,我必须使用bind
我可能不理解这个概念,因为我尝试了以下方法,但在尝试调用函数时出错
this.subscribe('messages', this.activeChat._id, this.senderId, () => {
this.autorun(() => {
let promiseMessages: Promise<Mongo.Collection<Message>> = this.findMessages();
promiseMessages.then((messageData: Mongo.Collection<Message>) => {
messageData.find().forEach(function (message: Message) {
setLocalMessage.bind(message);
});
});
});
我尝试构建应用程序时出现以下错误:
更新
谢谢你下面的建议
我现在正在使用下面的代码,它可以正常工作
let promiseMessages: Promise<Mongo.Collection<Message>> = this.findMessages();
promiseMessages.then((messageData: Mongo.Collection<Message>) => {
messageData.find().forEach((message: Message) => {
this.setLocalMessage(message);
});
});
让promiseMessages:Promise=this.findMessages();
promiseMessages.then((messageData:Mongo.Collection)=>{
messageData.find().forEach((message:message)=>{
this.setLocalMessage(message);
});
});
我已经读到,当我没有适当级别的句柄时,我应该使用bind
现在这有点过时了,最好看看这些天,它还向您展示了如何使用箭头功能
您之所以会收到错误消息,是因为setLocalMessage
不是一个变量,但仍然是this
的一个属性,因此您必须访问它。在您的案例中,基本上有三种解决方案:
bind
messageData.find().forEach(this.setLocalMessage.bind(this));
的上下文参数(假设它是forEach
方法):Array
- 另一个箭头功能:
messageData.find().forEach((message: Message) => { this.setLocalMessage(message); });
bind
现在这有点过时了,最好看看这些天,它还向您展示了如何使用箭头功能
您之所以会收到错误消息,是因为setLocalMessage
不是一个变量,但仍然是this
的一个属性,因此您必须访问它。在您的案例中,基本上有三种解决方案:
bind
messageData.find().forEach(this.setLocalMessage.bind(this));
的上下文参数(假设它是forEach
方法):Array
- 另一个箭头功能:
messageData.find().forEach((message: Message) => { this.setLocalMessage(message); });
- 这里有一些地方不对劲
在ES6中(因此也是TypeScript),您需要使用显式this引用实例成员,例如
this.setLocalMessage
。无论代码位于何处,仅编写setLocalMessage
都是无效的
在函数
中,这个
对象可能不是您所期望的。您需要从函数外部捕获此
对象,并将其放入变量中,如下所示:
this.subscribe('messages', this.activeChat._id, this.senderId, () => {
this.autorun(() => {
let self = this;
let promiseMessages: Promise<Mongo.Collection<Message>> = this.findMessages();
promiseMessages.then((messageData: Mongo.Collection<Message>) => {
messageData.find().forEach(function (message: Message) {
self.setLocalMessage(message);
});
});
});
这不是打字脚本本身的问题。没有它,代码将在运行时失败。这里有一些错误 在ES6中(因此也是TypeScript),您需要使用显式this引用实例成员,例如
this.setLocalMessage
。无论代码位于何处,仅编写setLocalMessage
都是无效的
在函数
中,这个
对象可能不是您所期望的。您需要从函数外部捕获此
对象,并将其放入变量中,如下所示:
this.subscribe('messages', this.activeChat._id, this.senderId, () => {
this.autorun(() => {
let self = this;
let promiseMessages: Promise<Mongo.Collection<Message>> = this.findMessages();
promiseMessages.then((messageData: Mongo.Collection<Message>) => {
messageData.find().forEach(function (message: Message) {
self.setLocalMessage(message);
});
});
});
这不是打字脚本本身的问题。如果没有它,代码将在运行时失败。这可能是一个输入错误,但是您的函数被声明为setLocalMessage,并且您的错误是setLocalNessage-这是一个输入错误还是实际问题?可能还值得添加“typescript”标记(甚至可以代替“javascript”标记),因为这是typescript代码。对不起,这是一个输入错误,现在修复了它可能是一个输入错误,但您的函数声明为setLocalMessage,您的错误为setLocalNessage-这是一个输入错误还是实际问题?可能还值得添加“typescript”标记(甚至可以代替“javascript”标记),因为这是typescript代码。抱歉,是一个输入错误,现在修复了谢谢,我将给它一个tryThanks Bergi,它现在调用了这个函数。但是,我现在遇到了一个问题,即该函数中的某些内容不起作用。请你看一下下列内容好吗?谢谢,我将给它一个tryThanks-Bergi,它工作了,现在调用这个函数。但是,我现在遇到了一个问题,即该函数中的某些内容不起作用。请你看一下下列内容好吗?谢谢你,我将尝试一下Tanks Greg,它成功了,现在调用该函数。但是,我现在遇到了一个问题,即该函数中的某些内容不起作用。请你看一下下列内容好吗?谢谢你,我将尝试一下Tanks Greg,它成功了,现在调用该函数。但是,我现在遇到了一个问题,即该函数中的某些内容不起作用。请你看一下下列内容好吗?
this.subscribe('messages', this.activeChat._id, this.senderId, () => {
this.autorun(() => {
let promiseMessages: Promise<Mongo.Collection<Message>> = this.findMessages();
promiseMessages.then((messageData: Mongo.Collection<Message>) => {
messageData.find().forEach(message => this.setLocalMessage(message));
});
});
});