In my program I make async
call for my function from another API module:
var info = await api.MyRequest(value);
Module code:
var request = require("request")
module.exports.MyRequest = async function MyRequest(value) {
var options = {
uri: "http://some_url",
method: "GET",
qs: { // Query string like ?key=value&...
key : value
},
json: true
}
try {
var result = await request(options);
return result;
} catch (err) {
console.error(err);
}
}
Execution returns immediately, however result
and therefore info
contains request object and request body - info.body
like key=value&...
, not required response body.
What I'm doing wrong? How to fix? What is proper request
usage with async
, or it only works correctly with promises like mentioned here: Why await is not working for node request module? Following article mentioned it is possible: Mastering Async Await in Node.js.
You need to use the
request-promise
module, not therequest
module orhttp.request()
.await
works on functions that return a promise, not on functions that return therequest
object and expect you to use callbacks or event listeners to know when things are done.The
request-promise
module supports the same features as therequest
module, but asynchronous functions in it return promises so you can use either.then()
orawait
with them rather than the callbacks that therequest
module expects.So, install the
request-promise
module and then change this:to this:
Then, you can do:
Pretty sure you can also do the following. If what you need does not return Promise by default you can provide it via new Promise method. Above answer is less verbose though.