从另一个函数内部的对象中提取数据而不写入 JSON?

Extracting data from an object inside of another function without writing to JSON?

我正在使用 discord.js 和节点以及一些其他软件包(如 yt-search 和 ytdl-core)编写具有音乐功能的 Discord 机器人。

我要解决的问题与下面的代码有关(newVar 在测试时只是一个占位符):

        let regex = /^https/i;
        let isUrl = regex.test(checkUrl);
        let songInfo;

        if (!isUrl) {
            yts(suffix, function (err, r) {
                if(err) console.error(err);
                const videos = r.videos;
                let data = JSON.stringify(videos[0])
                fs.writeFileSync('youtube.json', data)
            })

            let newVar = require('../youtube.json');
            let {url, title} = newVar;
            songInfo = await ytdl.getInfo(newVar.url)

        } else {
            songInfo = await ytdl.getInfo(args[1]);
        }


        const song = {
            title: songInfo.title,
            url: songInfo.video_url,
        };

我想做什么,

有什么想法吗?

很抱歉,如果我不够具体,或者我的理解很混乱,这是我的第一个 "complex" 项目。也可能是模块中的其他地方存在问题,但从我目前所做的来看,我认为它在上面显示的代码中的某个地方。谢谢!

这里是您可以做的事情。

const getSongInfo = (url, suffix) => {
    return new Promise(async (resolve, reject) => {
        let regex = /^https/i;
        let isUrl = regex.test(url);
        if (!isUrl) {
            // netween where is the suffix variable ?
            yts(suffix, async (err, r) => {
                if(err) reject(err);
                const videos = r.videos;
                let data = JSON.stringify(videos[0]);
                // still don't know why bother save it and access it again.
                fs.writeFileSync('youtube.json', data);
                let newVar = require('../youtube.json');
                resolve(await ytdl.getInfo(newVar.url));
            });
        } else {
            resolve(await ytdl.getInfo(args[1]));
        }
    });
}


// hope the outer function is async
let songInfo = await getSongInfo(checkUrl, suffix);

const song = {
    title: songInfo.title,
    url: songInfo.video_url,
};

确保检查不在范围内的后缀变量。