gpt4 book ai didi

node.js - 使用 Promisify(https) 的 POST 语法

转载 作者:太空宇宙 更新时间:2023-11-04 00:02:34 25 4
gpt4 key购买 nike

我正在使用NodeJS util.promisifiy函数,以便我可以将 Promise 和 async/await 与内置 https 模块一起使用,而不必安装任何依赖项。我唯一不确定的是 POST 请求的语法应该是什么,因为您通常将请求数据写入流中:

var req = https.request(options, (res) => {
//stuff
});

req.write(data);

如果 https 模块已被“ promise ”,它的工作方式是否相同?因此:

const request = promisify(https.request);
var req = request(options);
req.write(data);

或者像这样:

var response = await request(options, data);

当 http/https 函数被 promise 时,我似乎找不到任何关于它们的语法的信息。我发现的所有示例都使用 fs 模块。

最佳答案

据我所知:不,它不会起作用。

promisify 所做的就是将遵循“错误优先回调”设计的函数包装到 Promise 中。为此,给定的函数必须:

  • 接受数字 [0..n] 个参数来配置函数
  • 接受函数作为最后一个(或唯一)参数

预计作为最后一个参数传入的回调函数将被调用:

  • 错误对象,要么是假(表示成功),要么是错误(表示失败)
  • 表示函数结果的任意数量的附加参数。

如果满足所有这些条件,“ promise 函数”将执行以下操作:

  1. 使用所有给定参数及其自己的回调调用原始函数
  2. 检查回调的第一个参数是否为假
    • 如果是这样,拒绝带有第一个参数的 promise
    • 如果不是,则使用任何其他参数解决 promise
<小时/>

了解了上述内容,我们就可以轻松实现我们自己的“promisified”版本的请求方法:

// untested example code!
function postData(options, data) {
return new Promise((resolve, reject) => {
const req = https.request(options);
req.on("data", (chunk) => {});
req.on("error", (err) => {
reject(err);
})
req.on("end", (res) => {
// check if result is satisfactory and either resolve/reject here
if (res.isFine) {
resolve(res);
} else {
reject(new Error("Response indicated failure"));
}
});
// Send the data off
req.write(data);
});
}

这比仅调用单个函数更冗长,但它易于阅读并且很清楚该函数的作用。

个人建议:远离此类“实用程序”。如果您不明白代码内部发生了什么,如何调试它?创建这样一个简单的包装器所需的开销远远超过了该函数按照您的预期完成其工作的“希望”。

关于node.js - 使用 Promisify(https) 的 POST 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53963608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com