为什么诺言链接在Node.js中不能正常工作?

时间:2019-05-27 17:19:11

标签: javascript node.js asynchronous promise

我有一个脚本可以抓取一个网站,并应该将数据发送回客户端...只需让您知道app.get内所有内容

这是代码...第二个.then不起作用。一旦遍历数组,应该将数组填充到客户端之后再发送给客户端。但这不起作用...我设定第二个承诺的方式可能有问题吗?请帮忙。

  axios.get("https://www.sciencenews.org/").then(function(response){
     var $ = cheerio.load(response.data);
     $("div.field-item-node-ref").each(function(i,element){
       if($(element).children('.ad').length == 0 && $(element).children('article').length > 0) {
                    array1.push($(element).find('h2.node-title').text());
                    array2.push($(element).find('div.content').text());
 array3.push(`https://www.sciencenews.org${$(element).find('a').attr('href')}`);
                    array4.push(`${$(element).find('img').attr('src')}`);
                 }
            })
        }).then(()=>{
            res.send({titles:array1,summaries:array2,links:array3,base64img:array4});
         })

1 个答案:

答案 0 :(得分:1)

在提供的代码段中,没有声明任何数组,并且由于没有任何对象传递到函数中,因此没有res对象可以调用“ send”。

一旦声明了数组并将res临时替换为console.log,它似乎可以正常工作。

Working Repl.it

我假设您在路由中调用了此函数,因此在此函数的范围内应该有一个“ res”对象可用。如果是这样的话,看来只是在将数据推送到数组之前声明数组而已。