将变量保存在具有承诺的函数中的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问题[重复]的主要内容,如果未能解决你的问题,请参考以下文章