Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript learnyounode杂耍异步顺序不稳定_Javascript_Node.js - Fatal编程技术网

Javascript learnyounode杂耍异步顺序不稳定

Javascript learnyounode杂耍异步顺序不稳定,javascript,node.js,Javascript,Node.js,我正在尝试学习younode() 练习9##处理异步(尝试3按相同顺序获取请求和显示响应) 我写了下面的代码,但结果顺序不稳定。怎么了 var http = require('http'); var bl = require('bl'); var urls = []; for (var i = 2; i < process.argv.length; i++ ) { urls.push(process.argv[i]); }; var results = []; for (var

我正在尝试学习younode()
练习9##处理异步(尝试3按相同顺序获取请求和显示响应)

我写了下面的代码,但结果顺序不稳定。怎么了

var http = require('http');
var bl = require('bl');

var urls = [];

for (var i = 2; i < process.argv.length; i++ ) {
  urls.push(process.argv[i]);
};

var results = [];

for (var i = 0; i < urls.length; i++) {
  http.get(urls[i], function(response) {
    response.pipe(bl(function(err, data) {
      if (err) {
        console.error(err)
      };

// if this code results[i] = data.toString() // console.log shows “”    
      results.splice(i, 0 , data.toString());

      if ( results.length === urls.length) {
        for (var i = 0; i < results.length ; i++) {
          console.log(results[i]);
        }
      };
    }));
  });
}
var http=require('http');
var bl=需要('bl');
var url=[];
对于(变量i=2;i
官方答复如下

var http = require('http')
var bl = require('bl')
var results = []
var count = 0

function printResults () {
  for (var i = 0; i < 3; i++) {
    console.log(results[i])
  }
}

function httpGet (index) {
  http.get(process.argv[2 + index], function (response) {
    response.pipe(bl(function (err, data) {
      if (err) {
        return console.error(err)
      }

      results[index] = data.toString()
      count++

      if (count === 3) {
        printResults()
      }
    }))
  })
}

for (var i = 0; i < 3; i++) {
  httpGet(i)
}
var http=require('http'))
var bl=需要('bl')
var结果=[]
变量计数=0
函数printResults(){
对于(变量i=0;i<3;i++){
console.log(结果[i])
}
}
函数httpGet(索引){
http.get(process.argv[2+索引]、函数(响应){
响应管道(bl)(功能(错误、数据){
如果(错误){
返回控制台。错误(err)
}
结果[索引]=data.toString()
计数++
如果(计数==3){
打印结果()
}
}))
})
}
对于(变量i=0;i<3;i++){
httpGet(一)
}

I不会在嵌套循环中使用相同的计数器名称
I
,您正在响应回调中围绕第一个循环变量
I
创建闭包。计算回调时,
i
的值在每次执行时都将是
url.length-1
。感谢您的回答。我将索引修改为唯一值(I,j,k),但顺序并没有改进。