Javascript/Typescript';这';范围

Javascript/Typescript';这';范围,javascript,typescript,Javascript,Typescript,我正在与Ionic2和Meteor合作。但是,我确实有一个与这个对象的范围相关的Javascript/Typescript问题 当我没有适当级别的此句柄时,我必须使用bind 我可能不理解这个概念,因为我尝试了以下方法,但在尝试调用函数时出错 this.subscribe('messages', this.activeChat._id, this.senderId, () => { this.autorun(() => { let promiseMessage

我正在与Ionic2和Meteor合作。但是,我确实有一个与
这个
对象的范围相关的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));
              });
          });
      });