【问题标题】:Return result from async function in node js从节点js中的异步函数返回结果
【发布时间】:2021-07-04 07:36:05
【问题描述】:

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

也许一些库可以帮助我?

感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

    我花了一点时间将 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);
    })();
    

    我希望这会有所帮助。

    【讨论】:

    • 谢谢,它工作但这个结果阻止我访问其他函数中的全局变量。重点是来自客户端的一个大队列,每个元素都需要处理后放入输出队列中,如何不使用getQueue()函数,让后面的访问全局数组成为可能?
    • 谢谢,我尝试使用此代码。有些人后来把这个答案向右看
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-22
    • 2018-10-06
    • 2016-03-11
    • 2021-10-29
    • 1970-01-01
    • 2019-03-06
    相关资源
    最近更新 更多