Javascript Async.js Parallel 不适用于 socket.io

标签 javascript asynchronous socket.io node-async

我有以下代码块:

async.parallel([
    function(cb){ module.rpc("user.data",{"username":data.username},cb); },
    function(cb){ module.rpc("group.list",{"username":data.username},cb); },
    function(cb){ module.rpc("set.list",{},cb); }
],function(error,result){
    if(error){ callback(error); return; }
    var user = result[0], groups = result[1], sets = result[2];
    callback(null,template.render({"user":user,"groups":groups,"sets":sets}));
});

module.rpc 是一个通过 socket.io 从服务器获取必要数据的函数。现在,最终函数( async.parallel 的第二个参数)应该仅在给定的 3 个函数回调后调用。但是,在模板 (EJS) 呈现期间,当我尝试访问 groups.data 时,有时 会收到错误消息:

Uncaught TypeError: Cannot read property 'data' of undefined

代码对我来说似乎非常好,但只是偶尔有效。我在不修改底层代码的情况下反复重载页面,成功率在20%左右。我完全不知道为什么这里出了问题。我只能猜测该变量的赋值被延迟了。因此,我尝试使用 window.setTimeout 延迟渲染,但无济于事。为什么会这样?我该如何解决?

最佳答案

socket.io不断向服务器重复发送事件,直到得到确认。根据服务器负载,确认可能不会立即生效。因此发送了多个相同的请求,并且由于 async.parallel使用计数器而不是单独跟踪每个函数,最终函数被过早调用。

关于Javascript Async.js Parallel 不适用于 socket.io,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14788920/

相关文章:

javascript - 转换响应 JavaScript 中 base64 返回的 PDF

.net - 流多播 - 一次读取一个流,但以不同的方式处理它,缓冲最少

javascript - Live Server 工作,但我收到 localhost 的 404 错误

javascript - 连接已签名的 cookie 解析错误

javascript - 创建一个生成器来迭代对象属性排列

javascript - TweenMax 重复 GSAP

Javascript BBCode 解析器只识别第一个列表元素

JavaScript - 将数据传递给匿名函数

linux - 如何在实时 Linux 应用程序中记录数据?

node.js - socket.io如何顺序发送多个消息?