运行two async.并联串联

Run two async.series in parallel

本文关键字:async two 运行      更新时间:2023-09-26

我正在制作一个简单的javascript游戏。虽然我使用警报,但因为它们很简单,所以我尽量使程序异步,以便于用HTML替换警报。目前,我设置了新的播放器和他的两个控制键如下:

var name = "Player";
// TODO: Replace with HTML element
name = prompt("Name?", "Player "+gameSlave.lines.length+1);
var color = 0xFFFFFF;
color = parseInt(prompt("Color (hex)?", "0x"+Math.round(Math.random()*16777215)).toString(16),16);
var keys = {right:null, left: null};
async.series([
    /** KEY GATHERING BOCK **/
      //Empty function to clear event loop buffer where keystrokes are still remaining
      function(callback){setTimeout(callback, 50);},
      function(callback){gatherControlKey("LEFT", function(key) {keys.left=key;callback()});},
      function(callback){gatherControlKey("RIGHT", function(key) {keys.right=key;callback()});},
    /** REMOTE PLAYER GATHERING BLOCK **/
      function(callback) {
        // If player is added, continue
        gameSlave.once("player.added", callback);
        // Ask game to create new player
        gameSlave.emit("player.requested", name, color);
      },
      function(callback) {
          alert("Player set!");
      },
]);

有两个独立的块:

  1. 收集玩家控制键
  2. 请求服务器创建一个播放器(服务器返回名称,id和颜色)。

所以我想异步运行两个同步链。比如:

async.parallel([  //This throws error f you fill something in series
    async.series([ ... ]),
    async.series([ ... ])
]);

我不认为你的问题是清楚的,你不是说什么是你的具体问题,你只说它抛出一个异常,所以我试图猜测什么是错误的在你的代码。我认为你的语法是不正确的,你应该把这个系列包装在两个函数中,这样当这个系列结束时,它们就可以有一个回调函数来调用。是不是应该是

async.parallel([
    function(pCb) {
        async.series([
            function(cb) {
                console.log(1);
                cb();
            }
        ], function() {
            console.log("completed first series");
            pCb();
        })
    },
    function(pCb) {
        async.series([
            function(cb) {
                console.log(2);
                cb();
            }
        ], function() {
            console.log("completed second series")
            pCb();
        })
    }
], function() {
    console.log("completed parallel");
});

如果这不能解决问题,那么你能把你的问题说得更具体一点吗?