如何使用 Expo SDK 日历 API 获取 Android 中的默认日历?

How to get the Default Calendar in Android using the Expo SDK Calendar API?

已解决:使用 await 和一个变量来存储承诺。

我正在尝试使用 react-native 和 expo sdk 将事件插入到 android 设备上的默认日历中。以前,可以使用 createEventAsync() 方法创建事件,第一个参数为 Calendar.DEFAULT,但不再支持。我可以使用 getCalendarsAsync() 方法获取所有日历,但我返回的对象毫无意义。一些代码:

async addReservationToCalendar(date) {
    await this.obtainCalendarPermission();
    console.log(Calendar.getCalendarsAsync());
}

有人建议我可以遍历响应以找到 isPrimary 属性设置为 true 的日历,但我不知道如何实现这一点。我已经获得许可,并且收到以下承诺作为回应。 Promise { "_40": 0, "_55": null, "_65": 0, "_72": null, }.
我需要做什么才能使用 expo Calendar API 在 android 设备上设置日历事件?

因为这是一个承诺,所以你需要这样做

Calendar.getCalendarsAsync().then(calendars => console.log(calendars))

这是一个承诺,因此您可以使用 then 语句或 async await 。

所以 或者你可以

async addReservationToCalendar(date) {
    await this.obtainCalendarPermission();
    let result = await Calendar.getCalendarsAsync();
    console.log(result,'result')
    console.log(Calendar.getCalendarsAsync());
}

Calendar.getCalendarsAsync().then(calendars => console.log(calendars,'calenders'))

希望对您有所帮助。

版本 39 在 https://docs.expo.io/versions/v39.0.0/sdk/calendar/#usage:

有一个例子
async function getDefaultCalendarSource() {
  const calendars = await Calendar.getCalendarsAsync();
  const defaultCalendars = calendars.filter(each => each.source.name === 'Default');
  return defaultCalendars[0].source;
}