在我的程序中async
,我从另一个API模块调用了我的函数:
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
,或者仅与此处提到的Promise一起正确使用:为什么await对于节点请求模块不起作用?以下文章提到了可能的方法:在Node.js中掌握异步等待。
您需要使用request-promise
模块,而不是request
模块或http.request()
。
await
对返回承诺的函数起作用,而不对返回request
对象并希望您使用回调或事件侦听器知道何时完成的函数起作用。
该request-promise
模块支持与该模块相同的功能request
,但是其中的异步功能返回promise,因此您可以使用它们之一.then()
或await
与其一起使用,而不是使用request
模块期望的回调。
因此,安装request-promise
模块,然后更改它:
var request = require("request");
对此:
const request = require("request-promise");
然后,您可以执行以下操作:
var result = await request(options);
编辑2020年1月-维护模式下的request()模块
仅供参考,该request
模块及其派生类request-promise
现已处于维护模式,不会积极开发以添加新功能。您可以在此处阅读有关推理的更多信息。有替代品的清单此表与每个人的一些讨论。
我一直在使用got()
自己,它是从一开始就使用promise建立的,并且易于使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句