javascript - async.series 和 javascript 变量

标签 javascript node.js asynchronous node-async

我认为我的理解存在根本性的脱节。我一直在阅读回调,并寻找为什么以下内容可能不起作用,但我可能在错误的地方寻找。我有以下代码:

  users = []
  async.series [
    () ->
      userClient.smembers "users", (err, list) ->
        async.each list, (item, cb) ->
          userClient.hgetall item, (err, user) ->
            users.push user
        , (err) ->
          console.log err            
    , 
    () -> 
      console.log "test"
      console.log users
    ]

console.log“test”似乎没有打印,我已经尝试了很多不同的代码迭代,但是一旦它超出了最内部循环(users.push user),我无法检索用户的值。我最终得到一个空数组 []。任何人都有任何见解或者可以指出我的想法出了问题吗?谢谢。

最佳答案

由于每个函数都是异步的,因此它无法自动知道何时进行到该系列中的下一步。每个系列函数都将回调作为您需要调用的参数。

(doneCallback) ->
  userClient.smembers "users", (err, list) ->
    async.each list, (item, cb) ->
      userClient.hgetall item, (err, user) ->
        users.push user

        // You also need to call 'cb' here.
        cb();
    , (err) ->
      console.log err

      // Add this to go to the next step after.
      doneCallback(err)

此外,根据您使用 users 的用途,您可能需要使用 async.map而不是async.each简化代码。

关于javascript - async.series 和 javascript 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15869811/

相关文章:

java - jersey 支持 servlet 3.0 异步

javascript - 键盘选择组合框中的 Extjs Quicktips

javascript - Jquery 更改功能无法正常工作

node.js - AWS_IAM 身份验证,用于通过 Api 网关从 Elastic beanstalk 进行 Lambda 调用

javascript - Node 读取文件路径必须是字符串

node.js - 仅使用一个回调并行运行异步

javascript - 如何在Asp.Net Mvc4中检查验证码后传递Email Id值?

javascript - 检查表单中带有类的输入是否为空

node.js - 如何停止 NodeJS 将 GET 请求打印到控制台

c# - 在 C# 并行任务中为多个服务调用创建并行任务