节点js中异步函数的返回结果

时间:2021-04-08 12:20:14

标签: node.js parsing asynchronous async-await async.js

我在 node 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 视频名称的方法。

也许一些库可以帮助我?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

这让我可以将代码转换为使用 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);
})();

我希望这会有所帮助。