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

Aleksey Kontsevich:

在我的程序中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中掌握异步等待

jfriend00:

您需要使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章