当前位置:  开发笔记 > 编程语言 > 正文

如何计算回调?

如何解决《如何计算回调?》经验,为你挑选了1个好方法。

我尝试从3个来源收集数据但这些是异步的.因此我试图计算回调.这是我为此目的而编写的代码.

var http = require('http');
var data_str1 = '';
var data_str2 = '';
var data_str3 = '';
var ended = 0;
function callback1(response){
    response.on('end', function(){ended++;});
    response.on('data', function(data){
        data_str1 += data;
    });
}

function callback2(response){
    response.on('end', function(){ended++;});
    response.on('data', function(data){
        data_str2 += data;
    });
}

function callback3(response){
    response.on('end', function(){ended++;});
    response.on('data', function(data){
        data_str3 += data;
    });
}

http.get(process.argv[2], function(response){
    callback1(response);
    if (ended == 3) console.log(data_str1);
});

http.get(process.argv[3], function(response){
    callback2(response);
    if (ended == 3) console.log(data_str2);
});

http.get(process.argv[4], function(response){
    callback3(response);
    if (ended == 3) console.log(data_str3);
});

你能告诉我这段代码有什么问题吗?



1> 小智..:

这是我的解决方案.我已经测试过它的确有效.

var http = require('http');
var concat = require('concat-stream');

var urls = [];
var responses = [];
var count = 0;

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

function readResponse(index) {
  http.get(urls[index], function(response) {
    response.pipe(concat(function(data) {
      responses[index] = data.toString();
      count++;

      if (count == 3) {
        responses.forEach(function(response) {console.log(response);});
      }
    }));
  });
}

for (var i = 0; i < urls.length; i++) {
  readResponse(i);
}

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有