【问题标题】:async.series and javascript variablesasync.series 和 javascript 变量
【发布时间】:2013-03-29 23:40:44
【问题描述】:

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

  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“测试”似乎没有打印出来,我已经尝试了很多不同的代码迭代,但是一旦它超出了最里面的循环(users.push 用户),我无法检索用户的值。我最终得到一个空数组[]。任何人都有任何见解,或者可以指出我的想法哪里出错了?谢谢。

【问题讨论】:

    标签: javascript node.js asynchronous node-async


    【解决方案1】:

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

    (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 来简化代码。

    【讨论】:

    • 感谢您的解释!仍然围绕着异步的东西,但这有帮助!
    猜你喜欢
    • 2014-11-11
    • 1970-01-01
    • 2015-12-11
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 2014-10-22
    • 1970-01-01
    • 2014-04-26
    相关资源
    最近更新 更多