如何使用 node.js 按指定顺序收集 URL 的内容

How to collect the content of URLs in a specified sequence using node.js

本文关键字:URL 定顺序 node 何使用 js      更新时间:2023-09-26

我想从 3 个不同的 URL 收集内容,并将其打印到 stdout。内容必须按照提供URL的顺序打印,即process.argv[2] = URL1,process.argv[3] = URL2等。我认为如果我使用一系列嵌套回调,这将起作用,但相反,正在发生的事情是第二个 URL 的某些内容在第一个 URL 之前开始打印(每次都会根据加载页面所需的时间而变化,但它永远不会同步) - 如何对此进行编码,以便仅在第一个 URL 完全完成后打印第二个 URL等。。。这是我的代码:

var http = require('http');
var webpage1 = process.argv[2];
var webpage2 = process.argv[3];
var webpage3 = process.argv[4];
container(callback1, callback2, callback3);
function container(callback1, callback2, callback3) {
    callback1(callback2, callback3);
}
function callback1(callback2, callback3) {
    http.get(webpage1, function (response) {
        var body1 = [];
        response.on('data', function (chunk) {
            body1.push(chunk);
        }).on('end', function () {
            body1 = Buffer.concat(body1).toString();
            console.log(body1);
        });
    });
    callback2(callback3);
}
function callback2(callback3) {
    http.get(webpage2, function cb(response) {
        var body2 = [];
        response.on('data', function (chunk) {
            body2.push(chunk);
        }).on('end', function () {
            body2 = Buffer.concat(body2).toString();
            console.log(body2);
        });
    });
    callback3();
}
function callback3() {
    http.get(webpage3, function cb(response) {
        var body3 = [];
        response.on('data', function (chunk) {
            body3.push(chunk);
        }).on('end', function () {
            body3 = Buffer.concat(body3).toString();
            console.log(body3);
        });
    });
}

你不需要写3次相同的代码。另外,这里不需要使用回调。

var http = require('http');
var numOfURLs = 3;
(function printURL(a){
    http.get(process.argv[a + 2], function (response) {
      var body = [];
      response.on('data', function (chunk) {
          body.push(chunk);
      }).on('end', function () {
          body = Buffer.concat(body).toString();
          console.log(body);
          if(a < numOfURLs - 1) printURL(a + 1);
      });
  });
})(0);