Как изменить свойства значения с синтаксисом суперагента в nodejs?

Используя пакет суперагента в nodejs, я не уверен, что я могу сделать в .end().

Я пытаюсь изменить значения «название» и «описание» после получения данных в функции «получить», но они остаются прежними.

Также, когда я пытался вернуть data.body[0].title в .end(), тогда

var todo = new Todo();
console.log(todo.get());

он сказал, что это не определено. Как изменить значение свойств Todo с помощью синтаксиса суперагента?

Код, как показано ниже:

function Todo() {
  this.title = "milk";
  this.description = "ok, Milk is a white liquid produced by the mammary glands of mammals.";
}

util.inherits(Todo, Model);

Todo.prototype.get = function() {
  console.log(this.title);
  request
    .get(this.read().origin + '/todos/11' + '?userId=1&accessToken=' + this.read().accessToken)
    .send({
      username : 'jiayang',
      password : 'password',
      clientId : this.read().clientId,
      clientSecret : this.read().clientSecret
    })
    .end(function(data) {
      console.log(data.body[0]);
      this.title = data.body[0].title;
      this.description = data.body[0].description;
    });
};

person Jiayang    schedule 29.05.2014    source источник


Ответы (1)


Контекст this в обратном вызове end является локальной областью действия функции обратного вызова.

Пытаться;

Todo.prototype.get = function() {
  var self = this;

  console.log(this.title);
  request
    .get(this.read().origin + '/todos/11' + '?userId=1&accessToken=' + this.read().accessToken)
    .send({
      username : 'jiayang',
      password : 'password',
      clientId : this.read().clientId,
      clientSecret : this.read().clientSecret
    })
    .end(function(data) {
      console.log(data.body[0]);
      self.title = data.body[0].title;
      self.description = data.body[0].description;
    });
};
person Bulkan    schedule 29.05.2014
comment
Это было связано с тем, что выполнение запроса требует времени. Таким образом, он регистрирует исходный «заголовок», даже когда я делаю console.log после вызова функции «получить». Спасибо! - person Jiayang; 29.05.2014
comment
Могу ли я вернуть вещи в .end? как вернуть data.body - person Jiayang; 29.05.2014
comment
@Jiayang нет, так как никто не будет слушать и ждать возвращаемого значения. Речь идет об асинхронном характере обработки событий с помощью обратных вызовов и т. д. Существуют некоторые обходные пути (например, stackoverflow.com/a/18229477/2626313), но прежде чем выбрать один, вы должны убедиться, что понимаете основы, проверьте stackoverflow.com/questions/2353818/ - person xmojmr; 31.05.2014