簡體   English   中英

如何訪問Promise中的類的屬性?

[英]how can access property of class in promise?

我有一個具有一個方法的類。我想改變我的方法的返回類型。 但是在promise中無法訪問類的屬性。如何解決這個問題。但是得到這個異常

原因:TypeError:無法讀取未定義的屬性“ bot”

const SDK = require('balebot');
const Promise = require('bluebird');

import incoming from './incoming';
const _ = require('lodash');

class Bale {
  constructor(bp, config) {
    if (!bp || !config) {
      throw new Error('You need to specify botpress and config');
    }
    this.bot = null;
    this.connected = false;
    this.bot = new SDK.BaleBot(config.botToken);
    bp.logger.info('bale bot created');
  }

  setConfig(config) {
    this.config = Object.assign({}, this.config, config);
  }


  sendText(chat, text, options) {
    let msg = new SDK.TextMessage(text);

    return new Promise(function (resolve, reject) {
      var response = this.bot.send(msg, receiver);
      if (response) {
        reject(err);
      } else {
        resolve(response);
      }
    });
  }


}

module.exports = Bale;

您需要this bind或使用Arrow函數保留this上下文:

const SDK = require('balebot');
const Promise = require('bluebird');

import incoming from './incoming';
const _ = require('lodash');

class Bale {
  constructor(bp, config) {
    if (!bp || !config) {
      throw new Error('You need to specify botpress and config');
    }
    this.bot = null;
    this.connected = false;
    this.bot = new SDK.BaleBot(config.botToken);
    bp.logger.info('bale bot created');
  }

  setConfig(config) {
    this.config = Object.assign({}, this.config, config);
  }


  sendText(chat, text, options) {
    let msg = new SDK.TextMessage(text);

    // Use an arrow function instead of function
    return new Promise((resolve, reject) => {
      var response = this.bot.send(msg, receiver);
      if (response) {
        reject(err);
      } else {
        resolve(response);
      }
    });
  }


}

module.exports = Bale;

這會工作

sendText() {
    return new Promise((resolve, reject) => {
      console.log(this.bot); // it  will not be undefined
    });
  }

這部作品的原因是因為箭頭的功能詞匯結合其上下文所以this實際上指的是起始上下文。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM