无法将链接从一个函数传递到另一个函数

Trouble passing links from one function to another

我在 node.js 中使用 requestcheerio 编写了一个非常小的脚本来解析连接到 linkstitles 我已经从它的着陆页上删除。

问题是我找不到关于如何将链接(从第一个函数填充)传递到第二个函数以便从那里获取标题的任何想法。我是 node.js 的新手,所以不知道如何 return 第一个函数的结果并将它们传递给后一个函数。

我遇到的错误:

for (const link of links) {
                   ^
ReferenceError: links is not defined

这是完整的脚本:

var request = require('request');
var cheerio = require('cheerio');

const url = 'https://news.ycombinator.com';

request(url, function (error, response, html) {
  if (!error && response.statusCode == 200) {
    var $ = cheerio.load(html);
    $('.title .storylink').each(function(){
    var links = $(this).attr("href");
    });
  }
});

for (const link of links) {
  (function(url) {
    request(url, function (error, response, html) {
      if (!error && response.statusCode == 200) {
        var $ = cheerio.load(html);
        var title = $('title').eq(0).text();
        console.log(title);
      }
    });
})(link);
}

顺便说一句,脚本中使用的选择器是完美无缺的。我只需要知道将结果从一个函数传递到另一个函数即可。

您的 'links' 变量超出范围。它在 'request' 的回调之外。必须将请求变成承诺,使用请求承诺,或者将 for 循环移动到函数中以保持链接在范围内。

https://www.npmjs.com/package/request-promise

https://scotch.io/courses/10-need-to-know-javascript-concepts/callbacks-promises-and-async

看来我找到了解决办法。它成功了:

var request = require('request');
var cheerio = require('cheerio');

const url = 'https://news.ycombinator.com';

function getItems(callback){
  request(url, function (error, response, html) {
    if (!error && response.statusCode == 200) {
      var $ = cheerio.load(html);
      $('.title .storylink').each(function(){
      var links = $(this).attr("href");
      return callback(links,false);
      });
    }
  });
}
getItems((link)=>{
    request(link, function (error, response, html) {
      if (!error && response.statusCode == 200) {
        var $ = cheerio.load(html);
        var title = $('title').eq(0).text();
        console.log(title);
      }
    });
});