在我的程序中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中掌握Async
Await
。
您需要使用request-promise
模块,而不是request
模块或http.request()
。
await
对返回promise的函数起作用,而不对返回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建立的,并且易于使用。
我想进行一个基于当前状态的API调用,但不能使setState函数作为异步函数工作。 给我错误: 类型为“”的参数(状态:只读)= 如果我在setState方法之外获取数据,它会起作用,但我害怕对过时的页码进行API调用:
但是,了解node.js事件循环会发现: 当然,在后端,有用于DB访问和进程执行的线程和进程。 在C#中,编写带有标记的函数和带有的调用就足够了,这样.NET就可以将它放在另一个线程中。但是,node.js中组织方式不同的东西让我很困惑,async/await函数仍然会阻塞主线程。
问题内容: 使用最新版本的nodejs 7.6+,我开始使用async / await。 我使用的是jshint,但据我所知,它们目前确实支持此语法,有些建议使用eslint。 所以好吧,我设置了eslint,但是argh ..它也标记了异步功能。 我知道这没什么错,因为我的代码运行良好,仅是linter。如果我注释掉一个异步功能,它也只会标记下一个。实际上eslint仅标记发现此错误的第一个异步
问题内容: 我认为节点7.4支持异步/等待,但是此示例不起作用: 结果是: 如何在节点7.4上使用异步/等待? 问题答案: 是的,Node.js v7支持async-await,但将其锁定在标志后面。尚未准备就绪的功能不在此标记后面。 要在Node.js v7中使用async-await,只需使用此标志运行Node服务- async-await的正式发行版预定于4月启动的Node.js v8。 您
我以为async/wait在节点7.4中得到了支持,但是这个例子不起作用: 结果: 如何在node 7.4中使用async/await?
我试图在react/electron项目中使用async/await,但它不起作用。我想要的是获取docker容器状态列表。但是安慰。日志(列表)返回未定义的。 有人能帮我吗?:)