问题标签 [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.
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) 类型的参数=> 无效)=> 无效'。
如何设置正确的签名?
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 处。为什么那里断开连接?
typescript - Redis 客户端中的 Promisify 违反了 eslint 规则
我想使用 redis 客户端promisify
:
但是我遇到了 eslint 的两个问题:
ESLint: Avoid referencing unbound methods which may cause unintentional scoping of 'this'.(@typescript-eslint/unbound-method)
在this.redisClient.get
片段
和
ESLint: Unsafe assignment of an any value.(@typescript-eslint/no-unsafe-assignment)
在getAsync
我如何promisify
以一种可以识别类型和适当this
范围的方式使用?
node.js - util.promisify 将使用回调的异步函数转换为 Promises。为什么它不适用于遵循该格式的 AWS S3.upload?
问题: util.promisify将使用错误优先回调样式的异步函数转换为 Promise。但是,它似乎不适用于 AWS 的S3.upload(向下滚动到 .upload),这是一个使用错误优先回调格式的异步函数。
原始格式:
承诺格式:
但是以这种方式使用s3.upload
会引发错误,
TypeError:service.getSignatureVersion 不是函数
如果util.promisify
不一定适用于每个使用回调的异步函数,有没有办法预先确定一个函数是否可以使用它?或者,是否需要反复试验才能确定是否util.promisify
可行?
mysql - 如何在 Node js 中承诺一个 mysql 池连接?
我试图了解如何使用节点 js 工具来承诺池连接。我会使用async/await
逻辑保持我的代码干净(没有回调地狱,我真的不喜欢特别是交易)。
这是我的配置文件:
我正在执行这样的单个简单查询(并且它们工作正常):
我正在以这种方式开发交易(我认为这是一种完全错误的方法):
对于我不应该使用的事务pool.query
(我认为,每次获取一个新连接并在查询完成时自动释放它)。
在我看来,pool.query
事务造成了一个大问题:如果一次只运行一个事务是可以的,但是如果同时运行 2 个(或更多)事务,COMMIT
则第二个事务的可能可以COMMIT
是第一个事务的所有查询只是因为在第一个之前执行COMMIT
。
我认为我应该获得一个新的连接,将连接用于整个事务流程并在最后释放它。所以每个事务流都需要一个自己的连接。
但我不知道如何承诺 apool.getConnection
就像我承诺pool.query
.
我正在尝试类似的东西:
但它不起作用。我不会成为结果中的行,但如果console.log(results)
我有这个:
一些想法?谢谢
javascript - 这是 node/promisify 异步函数的有效语法吗?
我不小心输入await(await stat(content...
了它,它起作用了。不确定这是否是有效的语法,或者有更好的方法吗?我正在尝试读取所有目录文件并且与我的正则表达式不匹配。
node.js - NodeJS:等待跳过 Catch 块并退出函数。为什么?
这是我的第一个问题,所以请给我反馈。
有问题的文件是一个非常大的文件,所以我正在考虑使用异步读取。
预期行为:
成功:“等待”将导致代码的执行被阻塞,直到文件被读取。
错误:即使等待失败,任何错误都应该被 catch 块捕获。console.log() 应该表明它被捕获了。
Observed:await 失败,完全跳过 catch 块,在 Main 的下一行继续执行。整个异步函数被跳过。在调试器中,我可以看到结果中的正确输出只出现了一瞬间,然后它直接退出了函数。
有人可以告诉我为什么会发生这种情况以及如何解决吗?我的理解是,如果发生异常,catch 块将始终捕获它。请尽可能详细和清晰地解释,我仍在努力掌握 NodeJS 语言。
被注释掉的那行是我认为做同样任务的另一种方式。它也面临同样的问题。当我也有一个时,它甚至跳过了一个“终于”块。
此外,Main 中的“c”变量是调试器中的“待定”承诺。
最后,这段代码的总体目的是解析文本格式的 JSON 文件。这只是更大文件的 MVCE。
node.js - 如何在 JEST 中模拟一个承诺和绑定的函数?
我需要开玩笑地为一个函数编写一个测试。我的功能如下:
我希望将其值processed_input
传递给 function x
。
我认为类似的东西.toHaveBeenCalledWith
应该可以工作我不确定它如何用于承诺的绑定函数。
我还尝试conn.getConnection = { query: jest.fn() }
在通话之前模拟查询,fun
但我不确定如何继续进行expect
。
更新:到目前为止,我目前的解决方案是expect
在查询函数中包含 jest 语句。
希望有更好的方法。
javascript - 为什么我的 promisify 和 jwt 不返回值或错误?
这是我遇到的问题。它不会记录解码后的变量,但也不会给出任何错误。谁能帮我这个?