Возврат html-ответа на вызывающую функцию в nodejs - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть этот фрагмент Node.js.

var requestify = require('requestify');
// [...]
function remoterequest(url, data) {
  requestify.post(url, data).then(function(response) {
    var res = response.getBody();
    // TODO use res to send back to the client the number of expected outputs
  });
  return true;
}

Мне нужно вернуть res контент вместо true обратно вызывающей стороне.

Как я могу это сделать? В этом случае метод requestify является асинхронным, поэтому возвращаемое значение невозможно получить (так как оно еще не сгенерировано). Как я могу решить это? Как я могу отправить синхронный HTTP-запрос POST (даже без requestify)?

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Вы можете обратиться к этому обсуждению о том, как использовать содержимое, возвращаемое из обещания Как вернуть ответ от асинхронного вызова?

Как упоминало @Logar, вы не можете напрямую использовать контент, возвращенный в вашем обещании. Сначала вы должны вызвать свой метод, возвращающий обещание, и использовать .then, чтобы сделать возвращаемый контент доступным.

Пример :

</p> <pre><code> var requestify = require('requestify'); // [...] // This function returns a promise, so you have to call it followed by `.then` to be able to use its returned content function remoterequest(url, data) { requestify .post(url, data) .then((response) => { return response.getBody(); }); } //.... //... Some other code here //.... // Make a call to your function returning the promise remoterequest('your-url-here', {data-to-pass-as-param}) .then((res) => { // Calling `.then` here to access the returned content from `remoterequest` function // Now you can use `res` content here });

0 голосов
/ 27 апреля 2018

вам нужно вернуть обещание и использовать его в методе обещания, возвращенном remoteRequest:

var requestify = require('requestify');
// [...]
function remoterequest(url, data) {
  return requestify
    .post(url, data)
    .then((response) => response.getBody());
}

//....

remoteRequest('/foo', {bar: 'baz'}).then(res => {
  //Do something with res...
});

Обратите внимание, что он все равно не будет синхронным POST, но вы сможете использовать response.getBody (), если он доступен, если это то, что вы хотели

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