【问题标题】:Javascript Issue with saving variables in a function with a promise [duplicate]将变量保存在具有承诺的函数中的Javascript问题[重复]
【发布时间】:2022-01-17 19:06:29
【问题描述】:

我正在尝试从谷歌日历中检索事件列表,并且可以正常工作,但我不知道如何将它们保存在结构中。该结构在最后一个日志中为空,但在推送值后直接记录“2”。 我知道这是范围问题,但我找不到解决方案。

如果有人为我提供提示或解决方案,我将不胜感激。提前谢谢你。

// Get all the events between two dates
const getEvents = async (dateTimeStart, dateTimeEnd) => {

    try {
        let response = await calendar.events.list({
            auth: auth,
            calendarId: calendarId,
            timeMin: dateTimeStart,
            timeMax: dateTimeEnd,
            timeZone: 'Europe/Berlin'
        });
    
        let items = response['data']['items'];
        return items;
    } catch (error) {
        console.log(`Error at getEvents --> ${error}`);
        return 0;
    }
};

let start = '2021-12-01T00:00:00.000Z';
let end = '2022-01-01T00:00:00.000Z';

var Events = {
    date: new Array(),
    title: new Array()
}; 

var test = getEvents(start, end)
    .then((res) => {
        for(let i = 0; i < res.length; i++)
        {
            let DateGFormat = '';

            // Filter Full Day Events and Timed Events
            if(res[i].start.dateTime)
            {
                DateGFormat = res[i].start.dateTime.split('T')[0];
            }
            else 
            {
                DateGFormat = res[i].start.date;
            }

            let Year = DateGFormat.split('-')[0];
            let Month = DateGFormat.split('-')[1];
            let Day = DateGFormat.split('-')[2];

            const dayString = `${Day}/${Month}/${Year}`;
            const Title = res[i].summary;

            Events.date.push(dayString);
            Events.title.push(Title);
            console.log(Events.date.length);
        }
    })
    .catch((err) => {
        console.log(err);
    });

console.log(Events.date.length);

【问题讨论】:

    标签: javascript google-api scope global-variables google-calendar-api


    【解决方案1】:

    在调用 getEvents 后立即调用您的最后一个控制台。它不会等到 getEvents 解决。这就是控制台返回空白的原因。

    如果您使用 await 调用 getEvents,那么您的程序将在调用最后一个控制台之前等待 getEvents 完成。

    【讨论】:

    • 但是有解决方法吗?因为那是谷歌文档中的代码,我不太愿意重构整个部分。
    • 您将日志和后续代码放在 then 语句中。
    猜你喜欢
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-30
    • 2019-02-06
    • 1970-01-01
    • 2018-05-28
    相关资源
    最近更新 更多