在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.body
像key=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");