在Node.JS中使用async / await进行适当的请求

在我的程序中,我从另一个API模块进行async调用:

 var info = await api.MyRequest(value); 

模块代码:

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

执行返回立即,但是result ,因此info包含请求对象和请求身体 – info.bodykey=value&... ,不是必需的响应正文。

我做错了什么? 怎么修? 什么是正确的request使用async ,或者它只能在这里提到的承诺正常工作 : 为什么等待不起作用的节点请求模块 ? 以下文章提到它是可能的: 在Node.js掌握asynchronous等待 。

您需要使用request-promise模块,而不是request模块。

await返回promise的函数,而不是返回request对象的函数,并期望您使用callback函数或事件侦听器来知道什么时候完成。

request-promise模块支持与request模块相同的function,但其中的asynchronous函数会返回promise,因此您可以使用.then()await它们,而不是request模块期望的callback。

所以,安装request-promise模块然后改变它:

 var request = require("request"); 

对此:

 var request = require("request-promise");