Return 来自节点 js 中的异步函数

Return result from async function in node js

我在节点 js 中使用这个实验室 https://github.com/pste/youtube.get-video-info
任务是将异步函数的结果写入全局数组

var yt = require('youtube.get-video-info');

var outQueue = []; // global array

function getQueue(idName){

 yt.retrieve(idName, function(err, res) { // async function

    if (err) throw err;

    var result = ybVideoName(res);

    outQueue.push(result);
                                
 }); 
}


function ybVideoName(res){ // function to get youtube name from json

  var body = res.watch_next_response;

  let params = JSON.parse(body);   

  let jsonBody = params.contents.twoColumnWatchNextResults.results.results.contents;

  let jsonBodyget = jsonBody[0];

  let itog = jsonBodyget.videoPrimaryInfoRenderer.title.runs[0].text;

  itog = itog.replace(/[+]/g, ' ');

  return itog;

}

我尝试使用 promise 和 async 函数,但已提交。

函数 ybVideoName 是获取 YouTube 视频名称的方法。

也许一些库可以帮助我?

感谢您的帮助。

我花了一点时间将 youtube.get-video-info 改造成更现代的方法,使用 axios.js 作为向 Youtube 发出请求的库。我的叉子在这里:https://github.com/andrunix/youtube.get-video-info。您需要安装 axios 作为依赖项。您可以删除 'request' 作为依赖项,因为它已被弃用。

这让我可以转换代码以使用 async/await。您仍然需要将代码包装在异步函数中,但是。这是我的做法。

// https://github.com/andrunix/youtube.get-video-info

const yt = require('./youtube.get-video-info.js');
const outQueue = [];

async function getQueue(idName){
    let result = await yt.retrieve(idName);
    outQueue.push(ybVideoName(result));
}

function ybVideoName(res){ // function to get youtube name from json
    const body = res.watch_next_response;
    let params = JSON.parse(body);
    let jsonBody = params.contents.twoColumnWatchNextResults.results.results.contents;
    let jsonBodyget = jsonBody[0];
    let itog = jsonBodyget.videoPrimaryInfoRenderer.title.runs[0].text;
    return itog.replace(/[+]/g, ' ');
}

(async () => {
    await getQueue('ml-v1bgMJDQ');
    console.log(outQueue);
})();

希望对您有所帮助。