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