将变量保存在具有承诺的函数中的Javascript问题[重复]

Posted

技术标签:

【中文标题】将变量保存在具有承诺的函数中的Javascript问题[重复]【英文标题】:Javascript Issue with saving variables in a function with a promise [duplicate] 【发布时间】: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);

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

但是有解决方法吗?因为那是谷歌文档中的代码,我不太愿意重构整个部分。 您将日志和后续代码放在 then 语句中。

以上是关于将变量保存在具有承诺的函数中的Javascript问题[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在内置函数上解析 Javascript 承诺

承诺的 JavaScript 命名约定? [关闭]

类函数中的 Javascript ES6 承诺

JavaScript 作用域和闭包

基本的 Javascript 承诺实现尝试

如何将递归函数的返回值保存在变量 JavaScript 中