0

我有这个 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)?

4

2 回答 2

1

你需要返回一个 promise 并在 remoteRequest 返回的 promise 的 then 方法中使用它:

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(),如果这是您想要的

于 2018-04-27T12:12:58.197 回答
0

你可以参考这个关于如何使用从承诺返回的内容的讨论如何从异步调用返回响应?

正如@Logar 所提到的,您不能直接使用您的承诺中返回的内容。您必须首先调用您的方法返回一个承诺,并使用它 .then来使返回的内容可用。

示例

    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
        });

于 2018-04-27T12:48:43.537 回答