在回调函数的生命周期之后保留数据

Persisting data beyond the lifetime of a callback function

如果这是一个常见问题,请原谅我,我是 JavaScript 的新手。

我正在尝试使用来自 npmjs.

的库“video-url-link”

自述文件提供了以下示例:

videoUrlLink.twitter.getInfo('https://twitter.com/{@}/status/{ID}', {}, (error, info) => {
    if (error) {
        console.error(error);
    } else {
        console.log(info.full_text);
        console.log(info.variants);
    }
});

这很好用,但如果我希望“信息”对象在回调范围之外持续存在,我有什么选择?

我试过在 getInfo 调用之外声明一个变量,然后在回调中设置它,我没想到它会起作用 - 但它不起作用 (!)

我有的是:

const get_twitter_video_info = (video_url) => {

    var nfo = {};

    try
    {
        videoUrlLink.twitter.getInfo(
            video_url,
            {},
            (error, video_info) => {

                if (error !== undefined)
                    console.log(error);

                if (video_info !== undefined)
                {
                    nfo = JSON.parse(JSON.stringify(video_info));
                }
            }
        );
    }
    catch(err)
    {
        console.log (err);
        throw(err);
    }

    return nfo;
}

提前致谢。

您正在尝试 return nfo,甚至在回调被调用之前。在代码中,get_twitter_video_info 将 return 一个空对象,然后 getInfo 将 return 响应和将调用回调(您使用 nfovideo_info 的地方)。您可以在回调本身中使用 nfo 并进一步处理,也可以使用 async/await.