Как я могу использовать значение свойства предыдущего объекта внутри другого свойства того же объекта, когда я его объявляю - PullRequest
0 голосов
/ 22 апреля 2019

У меня есть класс, который возвращает объект со своими свойствами.Я хотел бы получить доступ к значению предыдущего реквизита внутри конструктора.

У меня есть следующий рабочий код:

class KafkaConsumer {
    constructor (metaDataBrokerList, groupID, autoCommit, AutoOffsetReset, topicName) {
        return { 
            consumer: this.create(metaDataBrokerList, groupID, autoCommit, AutoOffsetReset, topicName),
            connect: (consumer) => { this.connect(consumer) }
        };
    }


    create (metaDataBrokerList, groupID, autoCommit, AutoOffsetReset, topicName) {
        var consumer = new Kafka.KafkaConsumer({
            'metadata.broker.list': metaDataBrokerList,
            'group.id': groupID,
            'enable.auto.commit': autoCommit, // don't commit my offset
            'auto.offset.reset': AutoOffsetReset, // consume from the start
        });

        .
        .
        .

        return ( consumer );
    }

    // Conect the consumer
    connect (consumer) {
        consumer.connect();
    }
}

И вызов (как вы можете видеть, мне нужнопередать созданную переменную в функцию 'connect'. Я хочу избежать этого):

let kafkaConsumer = new KafkaConsumer(...props);
// Connect the consumer
kafkaConsumer.connect(kafkaConsumer.consumer);

Я хочу что-то вроде:

class KafkaConsumer {
    constructor (metaDataBrokerList, groupID, autoCommit, AutoOffsetReset, topicName) {
        return { 
            consumer: this.create(metaDataBrokerList, groupID, autoCommit, AutoOffsetReset, topicName),
            connect: this.connect(consumer) 
            // Where 'this.connect' is my function and 'consumer' is the previous prop
        };
    }

    .
    .
    .

}

Итак, звонок должен быть:

// Connect the consumer
kafkaConsumer.connect();

Ответы [ 2 ]

0 голосов
/ 24 апреля 2019

Я достиг своих целей.Я сделал, чтобы каждое свойство класса было связано с его частной функцией, поэтому каждое свойство класса является функцией, которая вызывает другую частную функцию:

class KafkaConsumer {
    constructor (metaDataBrokerList, groupID, autoCommit, AutoOffsetReset, topicName) {
        this.consumer = this.p_create(metaDataBrokerList, groupID, autoCommit, AutoOffsetReset, topicName);
        this.connect = () => { this.p_connect() };
    }

    // Conect the consumer
    p_connect () {
        this.consumer.connect();
    }
0 голосов
/ 22 апреля 2019

Немного неясно, чего вы пытаетесь достичь.

  • Почему вы хотите что-то вернуть в конструкторе?
  • Зачем вам нужен метод createкоторый просто возвращает объект с параметрами, которые есть у вас в конструкторе?
  • Что должен делать метод connect?

Если вы пытаетесь создать потребительский объект и вернуть егоВозможно, это решение подойдет вам:

class KafkaConsumer {
    constructor (metaDataBrokerList, groupID, autoCommit, AutoOffsetReset, topicName) {
        this.consumer = {
            'metadata.broker.list': metaDataBrokerList,
            'group.id': groupID,
            'enable.auto.commit': autoCommit, // don't commit my offset
            'auto.offset.reset': AutoOffsetReset, // consume from the start
        }
    }

    get() {
        return this.consumer;
    }
}

И используйте его так:

let consumer = new KafkaConsumer(props);
consumer.get(); // Returns your created consumer
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...