使循环同步节点js web-kit

Make loop synchronous node js web-kit

本文关键字:js web-kit 节点 同步 循环      更新时间:2023-09-26

我的app node.js webkit的目标是扫描每个代理文件。txt,并说如果代理工作。但我有一个问题,当我的游戏发布时,他不会等到测试结束。把"Get"放到第9行。当测试第一行时,var n位于file.txt文件的最后一行如何等待测试行11结束后再继续循环?

    var file = e.dataTransfer.files[i].path;
    content = fs.readFileSync(file, "UTF-8");
    var lines = content.split("'n");
    for (var n = 0; n < lines.length; n++)
    {
        var arr = lines[n].split(":");
        http.get({host: arr[0], port: arr[1], path: "http://www.google.fr", agent: false}, function(res, req) {
            console.log(req);
            if(res.statusCode == 200){
                el.className = '';
                el.innerHTML = arr[0] + ':' + arr[1] + ''n';
            }
        });
    }

以下是David的详细回答:

var async = require('async');   // make sure you install async (do "npm install async" from command line)
var file = e.dataTransfer.files[i].path;
content = fs.readFileSync(file, "UTF-8");
var lines = content.split("'n");
async.each(lines, function(line, callback) {
    var arr = line.split(":");
    http.get({host: arr[0], port: arr[1], path: "http://www.google.fr", agent: false}, function(res, req) {
        console.log(req);
        if(res.statusCode == 200){
            el.className = '';
            el.innerHTML = arr[0] + ':' + arr[1] + ''n';
        }
        callback();
    });
},function(){
  console.log("done");
});

您可以在http。获取回调并使用"bind"调用它,以在每次调用中保存您的数据。

var file = e.dataTransfer.files[i].path;
content = fs.readFileSync(file, "UTF-8");
var lines = content.split("'n");
var counter = 0;
var callback = function(res, req) {
  console.log(req);
  if(res.statusCode == 200){
    el.className = '';
    el.innerHTML = this[0] + ':' + this[1] + ''n';
  }
  counter++;
  if(counter == lines.length) {
    //do whatever you wanna do after all calls
  }
};
for (var n = 0; n < lines.length; n++){
    var arr = lines[n].split(":");
    http.get({
      host: arr[0], 
      port: arr[1], 
      path: "http://www.google.fr", 
      agent: false
    }, callback.bind(arr));
}

我建议你看看async.js库。它有大量的函数来处理javascript的异步特性。具体来说,您可能希望使用async.each函数。

为了给你一点概念,看一下这个:

async.each(..., function( file, callback) {
  http.get(...,function(){
   callback();
  });
},function(){
  console.log("done");
});

或者如果您想一个接一个地使用async.eachLimit, 1的限制