Получить функцию обратного вызова для возврата значения родительской функции - PullRequest
2 голосов
/ 23 января 2012

Я занимаюсь разработкой приложения node.js.Я пытаюсь получить функцию getBody(), которая возвращает тело ответа URL.То, как я это написал, очевидно, будет возвращать только функцию запроса, а не то, что возвращает функция запроса.Я написал это, чтобы показать, где я застрял.

var request = require('request');

var Body = function(url) {
  this.url = url;
};

Body.prototype.getBody = function() {
   return request({url:this.url}, function (error, response, body) {
    if (error || response.statusCode != 200) {
      console.log('Could not fetch the URL', error);
      return undefined;
    } else {
      return body;
    }
  });
};

1 Ответ

4 голосов
/ 23 января 2012

Предполагая, что request функция асинхронная , вы не сможете вернуть результат запроса.

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

Body.prototype.getBody = function (callback) {
    request({
        url: this.url
    }, function (error, response, body) {
        if (error || response.statusCode != 200) {
            console.log('Could not fetch the URL', error);
        } else {
            callback(body); // invoke the callback function, and pass the body
        }
    });
};

Так что вы бы использовали это так ...

var body_inst = new Body('http://example.com/some/path'); // create a Body object

  // invoke the getBody, and pass a callback that will be passed the response
body_inst.getBody(function( body ) {

    console.log(body);  // received the response body

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...