从节点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中的异步函数返回结果的主要内容,如果未能解决你的问题,请参考以下文章