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

Posted

技术标签:

【中文标题】从节点js中的异步函数返回结果【英文标题】:Return result from async function in node 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 视频名称的方法。

也许一些库可以帮助我?

感谢您的帮助。

【问题讨论】:

【参考方案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()函数,让后面的访问全局数组成为可能? 谢谢,我尝试使用此代码。有些人后来把这个答案向右看

以上是关于从节点js中的异步函数返回结果的主要内容,如果未能解决你的问题,请参考以下文章

带有mysql查询的异步函数不会返回查询结果node.js

通过节点的异步/等待不需要按预期顺序返回结果 - 使用啥正确模式?

ES6+--》熟知JS中的async函数

c++中的异步编程——future,promise

从动态加载的页面调用的 AJAX 返回异步结果

如何使用 promise 将数组从我的模块返回到我的 API?异步函数和承诺 - Node.js