Nodejs async.eachSeries

时间:2017-09-22 03:29:29

标签: node.js

几个月前我问了几个关于这个的问题,最近我又回到了那个剧本。我想出了一些事情,一位朋友帮助了剧本,但现在我又遇到了另一个问题。

这是我的脚本:

var j = schedule.scheduleJob('*/5 * * * * *', function(){
    var steamids = [];

    con.query("SELECT * FROM counterStrikeGlobalOffensive", function (err, rows) {
        for (var i = 0; i < rows.length; i++) {
            steamids.push(rows[i].steam64ID);
        }

        //const steamIDs = ["2342342341234123", "23423412341234", "2342314123423"]; // Steam IDs to check
        eachSeries(steamids, (steamID, callback) => {
            CSGOCli.playerProfileRequest(CSGOCli.ToAccountID(steamID));    
            CSGOCli.on("playerProfile", function(profile) {
                        console.log(JSON.stringify(profile, null, 2));
                        callback();
            });
        }, (err) => {
           // error thrown = set, else we're done
        });
    });
});

当我使用常量steamID时,它工作得很好,但是当我使用steamids时,它会给我一个错误。(我会解释)......

当我这样做时,console.log(steamids);它给我这个

[ '76561198152643711', '76561198213530057' ]

和steamIDs是

const steamIDs = ["2342342341234123", "23423412341234", "2342314123423"];

因此它与常量SteamID几乎相同,但常量为&#34; &#34;这些数字不应该是为什么它不起作用,但也许我错了?

另外,我有回调()但是如何让它停止给我一个错误 错误:已经调用了回调。

请询问任何其他信息:)

1 个答案:

答案 0 :(得分:0)

您获得Error: Callback was already called.因为CSGOCli.on()被多次执行。所以它调用一次回调,之后事件再次触发。所以回调再次被调用,但它应该只被调用一次。

对于简单的复制,请参阅此示例:

async.eachSeries([1, 2, 3], (data, callback) => {
  console.log("Data:", data);
  for(let i = 0; i < 2; i++) {
    callback();
  }
},
(err) => {
  console.log("Callback: ", err);
});

但是如果你在回调之前添加return,就像这样:return callback();,那么问题就会消失,因为函数将返回,并且不会再次调用回调。

因此,请将您的代码更改为此代码并查看其是否有效:

CSGOCli.on("playerProfile", function(profile) {
            console.log(JSON.stringify(profile, null, 2));
            return callback();
});