使用 CoffeeScript 从 Node.js 上的 Redis 中提取对象数组的更好方法

发布于 2024-11-18 09:33:40 字数 771 浏览 1 评论 0原文

请查看下面的代码并提出更优雅的方法来执行相同的操作。

我将 JSON 字符串存储在 Redis 数据库中。为了提取对象数组,我使用以下有效的代码。只是为了学习,尽管我想找到更好的方法来做同样的事情。这是 CoffeeScript 代码:

redis = require "redis"
client = module.exports.client = redis.createClient()

getRecord = module.exports.getRecord = (key, fn) ->
  client.get key, (err, result) ->
    fn err, null if err
    obj = JSON.parse(result)
    fn null, obj

getDataSet = module.exports.getDataSet = (pattern, fn) ->
  client.keys pattern, (err, result) ->
    fn err, null if err
    dataSet = []
    length = result.length
    count = 0
    for key in result
      getRecord key, (err, obj) ->
        fn err, null if err
        count = count + 1
        dataSet.push obj
        fn null, dataSet if count is length

Please review the code below and suggest more elegant ways of doing the same.

I am storing JSON strings in Redis database. To extract an array of objects, I use the following code that works. Just for learning though I wanted to find better ways of doing the same. Here is the CoffeeScript code:

redis = require "redis"
client = module.exports.client = redis.createClient()

getRecord = module.exports.getRecord = (key, fn) ->
  client.get key, (err, result) ->
    fn err, null if err
    obj = JSON.parse(result)
    fn null, obj

getDataSet = module.exports.getDataSet = (pattern, fn) ->
  client.keys pattern, (err, result) ->
    fn err, null if err
    dataSet = []
    length = result.length
    count = 0
    for key in result
      getRecord key, (err, obj) ->
        fn err, null if err
        count = count + 1
        dataSet.push obj
        fn null, dataSet if count is length

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

半岛未凉 2024-11-25 09:33:40

我认为你的代码非常可靠。请注意,您的

for key in result

循环正在创建列表理解;这意味着如果 result.length 很大,您将看到显着的性能开销,甚至可能出现内存问题。为了避免这种情况,您需要添加一个明确的返回

for key in result
  getRecord key, (err, obj) ->
    ...
return

有人提议引入一个void 函数语法 就适合这种情况,但 CoffeeScript 的核心提交者似乎都不太喜欢它。

I think your code is pretty solid. Just be warned that your

for key in result

loop is creating a list comprehension; that means that if result.length is large, you're going to see significant performance overhead and perhaps even memory issues. To avoid this, you need to add an explicit return:

for key in result
  getRecord key, (err, obj) ->
    ...
return

There was a proposal to introduce a void function syntax for just such cases, but none of CoffeeScript's core committers seem very fond of it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文