当前位置: 首页 > 面试题库 >

在Node.JS中使用异步/等待正确请求

柴彬
2023-03-14
问题内容

在我的程序中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.bodykey=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容器状态列表。但是安慰。日志(列表)返回未定义的。 有人能帮我吗?:)