动态异步并行任务 [英] Dynamic async parallel task

查看:177
本文介绍了动态异步并行任务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

上下文:

我拿来一些用户。我想返回响应之前更多地了解这些特定的用户,所以我取了所有用户的详细信息,并添加到结果...然后我返回结果的所有请求都完成之后。我使用了平行遇到问题电话:

 异步=需要异步#假设我不知道被多少个用户在这里。测试数据。
用户= [
    名称:USER1
  ,
    名称:用户2
]#假一些额外的数据添加到用户。
fetchUser =(姓名,CB) - GT;  的setTimeout( - >
    用户=
      名称:名称
      电子邮件:姓名+'@ email.com
    CB用户
  ),1 * 1000
fetchUsers:(用户列表,CB) - GT;  结果=
    数:userList.length
    用户:[]  #runInParallel = []
  #用户在用户列表
  #fetchUsers(user.name)#是啊,不会工作的。
  #
  #async.parallel runInParallel  async.parallel [
    fetchUser('用户1')#是啊,我怎么建立一个函数数组?
    fetchUser(用户2)
  ],(犯错,用户) - GT;
    #的console.log回到用户+ user.name#如果这个回调一次,那么这将无法工作....
    如果!犯错
      result.users.push用户    CB结果#做到这一点。
fetchUsers用户,(结果) - >
  结果的console.log


解决方案

不要使用async.parallel,使用async.each的 https://github.com/caolan/async#each

  async.each用户列表,fetchUser,(犯错,用户) -  GT;

Context:

I fetched some "users". I want to know more about these specific users before returning the response, so I fetch detailed info for all users and add that to a result...then I return the result after all requests have finished. I'm having trouble using the parallel call:

async = require 'async'

# Assume I don't know how many users are here. Test data.
users = [
    name: 'user1'
  ,
    name: 'user2'
]

# Fake add some extra data to the user.
fetchUser = (name, cb) ->

  setTimeout (->
    user = 
      name: name
      email: name + '@email.com'
    cb user
  ), 1 * 1000


fetchUsers: (userList, cb) ->

  result = 
    count: userList.length 
    users: []

  # runInParallel = []
  # for user in userList
  #   fetchUsers(user.name) # Yea, not going to work either.
  #
  # async.parallel runInParallel

  async.parallel [
    fetchUser('user1') # Yea, how do I build an array of a function?
    fetchUser('user2')
  ], (err, user) ->
    #console.log 'returned user ' + user.name # If this calls back once, then this won't work....
    if !err
      result.users.push user

    cb result

# Do it.
fetchUsers users, (result) ->
  console.log result

解决方案

Don't use async.parallel, use async.each https://github.com/caolan/async#each

async.each userList, fetchUser, (err, users) ->

这篇关于动态异步并行任务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆