问题标签 [node-promisify]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
634 浏览

node.js - promisify redis 获取并返回正确的打字稿类型

redis 节点库中的 redis 方法get具有以下打字稿签名:

如果我promisify使用该方法,则签名丢失并且返回类型变为any.

我试图以这种方式设置正确的签名:

但 ts lint 显示一些错误:

获取键的值。

没有重载匹配此调用。Overload 1 of 14, '(fn: CustomPromisify<(key: string, cb?: Callback) => boolean>): (key: string, cb?: Callback) => boolean',给出以下错误。'(key: string, cb?: Callback) => boolean' 类型的参数不能分配给 'CustomPromisify<(key: string, cb?: Callback) => boolean>' 类型的参数。财产承诺' 在类型 '(key: string, cb?: Callback) => boolean' 中缺失,但在类型 'CustomPromisifyLegacy<(key: string, cb?: Callback) => boolean>' 中是必需的。重载 2 of 14, '(fn: (callback: (err: any, result: (key: string, cb?: Callback) => boolean) => void) => void): () => Promise<(key : string, cb?: Callback) => boolean>',给出以下错误。'(key: string, cb?: Callback) => boolean' 类型的参数不可分配给 '(callback: (err: any, result: (key: string, cb?: Callback) => boolean) 类型的参数=> 无效)=> 无效'。

如何设置正确的签名?

0 投票
1 回答
118 浏览

javascript - 如果数组为空,如何在节点中返回假值承诺方法,反之亦然

我正在尝试承诺代码,但即使用户在数据库中不存在,它也总是返回我解决问题,任何人都可以帮助我修复我的代码和返回函数中的返回语句,第二个控制台日志只能工作。

这是我的代码

API 调用

函数调用

何时提供存在的用户电子邮件 (t@t.com)

在此处输入图像描述

何时提供不存在的用户电子邮件(09@t.com)

在此处输入图像描述

0 投票
0 回答
261 浏览

node.js - Node.js memcached 从 try/catch 中抛出未处理的 Promise 拒绝

我正在使用 node.js memcached 库的承诺版本进行缓存。

这些在我的connections.js 文件的导出中公开。我认为这已经足够了,因为我希望 memcached 如果有任何问题会静默失败,我可以回退到数据库。

每小时一次或两次(我猜应用程序每小时收到大约 30,000 个请求)请求失败,日志的输出是这样的:

这对我来说似乎很奇怪,但我想我可以通过将我的函数包装在 try/catch 中来解释这种可能性。

在调试并连接到 memcached 服务器时,我看到调用 cache.incr() 时发生了同样的错误。异常没有被捕获,它只是使请求失败并向客户端发送了 500。

我错过了什么?Promisify 不处理深度异常吗?日志永远无法将异常一直追溯到我的代码中的函数调用;它只是停在 memcached 库中的 utils.js 处。为什么那里断开连接?

0 投票
1 回答
117 浏览

typescript - Redis 客户端中的 Promisify 违反了 eslint 规则

我想使用 redis 客户端promisify

但是我遇到了 eslint 的两个问题:

  1. ESLint: Avoid referencing unbound methods which may cause unintentional scoping of 'this'.(@typescript-eslint/unbound-method)this.redisClient.get片段

  1. ESLint: Unsafe assignment of an any value.(@typescript-eslint/no-unsafe-assignment)getAsync

我如何promisify以一种可以识别类型和适当this范围的方式使用?

0 投票
2 回答
142 浏览

node.js - util.promisify 将使用回调的异步函数转换为 Promises。为什么它不适用于遵循该格式的 AWS S3.upload?

问题: util.promisify将使用错误优先回调样式的异步函数转换为 Promise。但是,它似乎不适用于 AWS 的S3.upload(向下滚动到 .upload),这是一个使用错误优先回调格式的异步函数。

原始格式:

承诺格式:

但是以这种方式使用s3.upload会引发错误,

TypeError:service.getSignatureVersion 不是函数

如果util.promisify不一定适用于每个使用回调的异步函数,有没有办法预先确定一个函数是否可以使用它?或者,是否需要反复试验才能确定是否util.promisify可行?

0 投票
1 回答
601 浏览

mysql - 如何在 Node js 中承诺一个 mysql 池连接?

我试图了解如何使用节点 js 工具来承诺池连接。我会使用async/await逻辑保持我的代码干净(没有回调地狱,我真的不喜欢特别是交易)。

这是我的配置文件:

我正在执行这样的单个简单查询(并且它们工作正常):

我正在以这种方式开发交易(我认为这是一种完全错误的方法):

对于我不应该使用的事务pool.query(我认为,每次获取一个新连接并在查询完成时自动释放它)。

在我看来,pool.query事务造成了一个大问题:如果一次只运行一个事务是可以的,但是如果同时运行 2 个(或更多)事务,COMMIT则第二个事务的可能可以COMMIT是第一个事务的所有查询只是因为在第一个之前执行COMMIT

我认为我应该获得一个新的连接,将连接用于整个事务流程并在最后释放它。所以每个事务流都需要一个自己的连接。

但我不知道如何承诺 apool.getConnection就像我承诺pool.query.

我正在尝试类似的东西:

但它不起作用。我不会成为结果中的行,但如果console.log(results)我有这个:

一些想法?谢谢

0 投票
4 回答
89 浏览

javascript - 这是 node/promisify 异步函数的有效语法吗?

我不小心输入await(await stat(content...了它,它起作用了。不确定这是否是有效的语法,或者有更好的方法吗?我正在尝试读取所有目录文件并且与我的正则表达式不匹配。

0 投票
1 回答
199 浏览

node.js - NodeJS:等待跳过 Catch 块并退出函数。为什么?

这是我的第一个问题,所以请给我反馈。

有问题的文件是一个非常大的文件,所以我正在考虑使用异步读取。

预期行为:

成功:“等待”将导致代码的执行被阻塞,直到文件被读取。

错误:即使等待失败,任何错误都应该被 catch 块捕获。console.log() 应该表明它被捕获了。

Observed:await 失败,完全跳过 catch 块,在 Main 的下一行继续执行。整个异步函数被跳过。在调试器中,我可以看到结果中的正确输出只出现了一瞬间,然后它直接退出了函数。

有人可以告诉我为什么会发生这种情况以及如何解决吗?我的理解是,如果发生异常,catch 块将始终捕获它。请尽可能详细和清晰地解释,我仍在努力掌握 NodeJS 语言。

被注释掉的那行是我认为做同样任务的另一种方式。它也面临同样的问题。当我也有一个时,它甚至跳过了一个“终于”块。

此外,Main 中的“c”变量是调试器中的“待定”承诺。

最后,这段代码的总体目的是解析文本格式的 JSON 文件。这只是更大文件的 MVCE。

0 投票
1 回答
242 浏览

node.js - 如何在 JEST 中模拟一个承诺和绑定的函数?

我需要开玩笑地为一个函数编写一个测试。我的功能如下:

我希望将其值processed_input传递给 function x

我认为类似的东西.toHaveBeenCalledWith应该可以工作我不确定它如何用于承诺的绑定函数。

我还尝试conn.getConnection = { query: jest.fn() }在通话之前模拟查询,fun但我不确定如何继续进行expect

更新:到目前为止,我目前的解决方案是expect在查询函数中包含 jest 语句。

希望有更好的方法。

0 投票
1 回答
31 浏览

javascript - 为什么我的 promisify 和 jwt 不返回值或错误?

这是我遇到的问题。它不会记录解码后的变量,但也不会给出任何错误。谁能帮我这个?