Javascript 从回调节点返回连接的字符串

Javascript 从回调节点返回连接的字符串,javascript,string,node.js,scrape,Javascript,String,Node.js,Scrape,嗨,我是nodejs的新手,我在metrolyrics.com上返回一串歌词时遇到了麻烦。歌词存储在单独的段落中,我试图返回一个所有段落都连接的字符串。我在网上查阅了一些资源,发现我必须使用回调函数,但我认为我没有正确地使用它。以下是我目前掌握的代码: var request = require('request'); var cheerio = require('cheerio'); function getLyrics(artistName, songTitle, fn) { va

嗨,我是nodejs的新手,我在metrolyrics.com上返回一串歌词时遇到了麻烦。歌词存储在单独的段落中,我试图返回一个所有段落都连接的字符串。我在网上查阅了一些资源,发现我必须使用回调函数,但我认为我没有正确地使用它。以下是我目前掌握的代码:

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

function getLyrics(artistName, songTitle, fn) {
    var lyric = "";
    var url = 'http://www.metrolyrics.com/' + songTitle.toLowerCase().replace(/ /g, "-")+ "-lyrics-" + artistName.toLowerCase().replace(/ /g, "-") + ".html";
    request(url, function(err, resp, body){
        if(err) {
            throw err;
        }
        $ = cheerio.load(body);
        $('#lyrics-body-text p').each(function(){
            lyric += $(this).text();
        });
    }); 
    return fn(lyric);
}

getLyrics('John Legend', 'All of Me', function(result) {console.log(result)});

否则,在请求完成并执行回调之前,将立即执行return。

感谢您的快速响应!非常感谢,你是对的。我将return语句移动到asynchrequest函数中,得到了想要的结果。再次感谢!
var request = require('request');
var cheerio = require('cheerio');

function getLyrics(artistName, songTitle, fn) {
    var lyric = "";
    var url = 'http://www.metrolyrics.com/' + songTitle.toLowerCase().replace(/ /g, "-")+ "-lyrics-" + artistName.toLowerCase().replace(/ /g, "-") + ".html";
    request(url, function(err, resp, body){
        if(err) {
            throw err;
        }
        $ = cheerio.load(body);
        $('#lyrics-body-text p').each(function(){
            lyric += $(this).text();
        });
        return fn(lyric); // You should call your callback inside request callback, because it's an async operation
    }); 
}

getLyrics('John Legend', 'All of Me', function(result) {console.log(result)});