Работа с глобальным объектом [дубликат]

123
25 декабря 2019, 05:20
This question already has answers here:
Потеря контекста вызова (5 ответов)
Закрыт 9 месяцев назад.

Перешёл на mongoDB и так получилось, что найденные данные мне нужно записать в объект this.buyer, но это не работает. Как правильно это сделать и как вызывать после записи функции?

PlayerTracker.prototype.updateBuyers = function() {
  if (!db) return;
  this.buyer = {}; // work
  this.updateData(); // work
  db.collection("buyers").findOne({uuid: this._uuid}, function(err, b) {
    if (err) throw err
    if (!b) return;
    this.buyer = b; // dont work
    this.updateData(); // dont work
  });
}
Answer 1

Проще всего использовать стрелочную функцию - они используют контекст (this) своего окружения:

PlayerTracker.prototype.updateBuyers = function () {
  // ...
  db.collection("buyers").findOne({ uuid: this._uuid }, (err, b) => {
    if (err) throw err; 
    if (!b) return;
    this.buyer = b;
    this.updateData();
  });
}

p.s.: Объект экземпляра класса (прототип которого ты дополняешь) не является глобальным... как минимум, он второго уровня. Глобальный объект в Node - это global.

READ ALSO
Как сравнить две длины массива?

Как сравнить две длины массива?

Как сравнить две длины массива и выполнить функцию?

120
JS получить имя фала из URL

JS получить имя фала из URL

Подскажите как получить название файла

116
Реализация поиска на странице с помощью фильтрации массива, не обращая внимания на раскладку клавиатуры VUE JS

Реализация поиска на странице с помощью фильтрации массива, не обращая внимания на раскладку клавиатуры VUE JS

Есть функция для поискаСейчас фильтрация идет по словам с соответствующей языковой раскладкой клавиатуры

125