在我的程序中async,我从另一个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&...,不需要响应体。
result
info
info.body
key=value&...
我做错了什么?怎么修?正确的request用法是什么async,或仅与此处提到的Promise一起正确使用:为什么await对于节点请求模块不起作用?以下文章提到了可能的方法:在Node.js中掌握Async Await。
request
您需要使用request-promise模块,而不是request模块或http.request()。
request-promise
http.request()
await对返回promise的函数起作用,而不对返回request对象并希望您使用回调或事件侦听器知道何时完成的函数起作用。
await
该request- promise模块支持与该模块相同的功能request,但是其中的异步函数返回promise,因此您可以使用它们之一.then()或await与其一起使用,而不是使用request模块期望的回调。
request- promise
.then()
因此,安装request-promise模块,然后更改此设置:
var request = require("request");
对此:
const request = require("request-promise");
然后,您可以执行以下操作:
var result = await request(options);
编辑2020年1月-维护模式下的request()模块
仅供参考,该request模块及其派生类request- promise现在处于维护模式,不会积极开发以添加新功能。您可以在此处阅读更多有关推理的信息。有替代品的清单此表与每个人的一些讨论。
我一直在使用got()自己,它是从一开始就使用promise建立的,并且易于使用。
got()