gpt4 book ai didi

javascript - 由于范围问题,变量返回为未定义

转载 作者:太空宇宙 更新时间:2023-11-04 02:47:42 25 4
gpt4 key购买 nike

我正在尝试获取 YouTube 视频以获取我从ficialcharts.com 抓取的数据。我能够抓取数据并获取它们的 YouTube 网址。但是当我尝试插入仅将标题和艺术家姓名推送到数组中。变量 youtubeUrl 未分配值。为什么变量 youtubeUrl 不在范围内?

我尝试了多种方法。我尝试在搜索函数内部声明 youtubeUrl,然后在请求外部声明,但我遇到了同样的问题。

我还尝试将 json.tracks.push 移到搜索函数内,但 json 不在范围内,因此没有添加任何内容到轨道

我正在使用https://www.npmjs.org/package/youtube-search用于搜索视频。

// Scraping charts
app.get('/scrape', function(req, res){

url = 'http://www.officialcharts.com/music-charts/';

request(url, function(error, response, html){
if(!error){
var $ = cheerio.load(html);
var title, artist, youtubeUrl;
var json = {tracks:[]};
$('div .infoHolder').each(function(){
var data = $(this);
var opts = {
maxResults: 1,
startIndex: 1
};

// Scrapped title and artist name
title = data.children('h3').text();
artist = data.children('h4').text();


// Searching for youtube videos
search(title, opts, function (err, results) {
if (err) {
return console.log(err);
}
youtubeUrl = results[0].url;
})


console.log(youtubeUrl); // THIS IS RETURNED UNDEFINED
// youtubeUrl IS NOT PUSHED TO THE ARRAY
// ONLY TITLE AND ARTIST PUSHED
json.tracks.push({title:title,artist:artist,url: youtubeUrl});
})
}
res.send(json);

})
})

最佳答案

我的猜测是您在 .each() 之外定义了 youtubeUrl 变量,然后尝试从 search() 函数中访问它。

尝试在 .each() 中声明 youtubeUrl 变量,因为它似乎不需要保存数据太长时间。这应该够了吧。

编辑:忘记我刚刚写的内容,因为我完全误读了你的代码。检查您在搜索功能中返回的内容。它似乎是异步的,因此 youtubeUrl var 在您尝试获取其值后被设置。您可以尝试将数据收集移动到搜索成功后调用的外部函数。

// Scraping charts
app.get('/scrape', function(req, res){

url = 'http://www.officialcharts.com/music-charts/';
function pushInfo(res,title, artist, youtubeUrl){
res.send({title:title,artist:artist,url: youtubeUrl});
};
request(url, function(error, response, html){
if(!error){
var $ = cheerio.load(html);
var title, artist, youtubeUrl;
var json = {tracks:[]};
$('div .infoHolder').each(function(){
var data = $(this);
var opts = {
maxResults: 1,
startIndex: 1
};

// Scrapped title and artist name
title = data.children('h3').text();
artist = data.children('h4').text();


// Searching for youtube videos
search(title, opts, function (err, results) {
if (err) {
return console.log(err);
}
//youtubeUrl = results[0].url;
pushInfo(res, title, artist, results[0].url);
});
});
}
});
});

这完全未经测试,因为我实际上不知道搜索功能的作用,但一旦搜索功能使用此方法完成,至少所有信息都应该可供您使用。

关于javascript - 由于范围问题,变量返回为未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25862973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com