从反应原生/[未处理的承诺拒绝:FirebaseError:预期类型'ba',但它是:自定义Oa对象]中获取项目列表

Posted

技术标签:

【中文标题】从反应原生/[未处理的承诺拒绝:FirebaseError:预期类型\'ba\',但它是:自定义Oa对象]中获取项目列表【英文标题】:Get list of items from firestore in react native/[Unhandled promise rejection: FirebaseError: Expected type 'ba', but it was: a custom Oa object]从反应原生/[未处理的承诺拒绝:FirebaseError:预期类型'ba',但它是:自定义Oa对象]中获取项目列表 【发布时间】:2022-01-15 15:14:43 【问题描述】:

您好,我需要从我的 firestore db 中获取这样的项目列表

items=
    '2012-05-22': [name: 'item 1 - any js object'],
    '2012-05-23': [name: 'item 2 - any js object', height: 80],
    '2012-05-24': [],
    '2012-05-25': [name: 'item 3 - any js object', name: 'any js object']
  

这是我的数据库结构

所以这是我的代码,但不起作用

const getUserEvents = () => 
  const FSquery = query( collection( FSdb, `usertasks/$user.uid/events`) )
  const unsubscribe = onSnapshot( FSquery, ( querySnapshot ) => 
  // get all documents (using the date as id) from user's events collection
  let eventData = 
  querySnapshot.forEach( (doc) => 
    console.log("testing id", doc.id)

  let arr = []
  // the id of the document is the date for the event
  eventData[ doc.id ] = arr
  console.log("testing array", arr)
  console.log("testing eventdata", eventData)

  )
  // now we get the collection of events for each day
  let eventsOfTheDay = []
  const eventKeys = Object.keys( eventData )
  eventKeys.map( async (eventDate) => 
  const events = await getDocs( FSdb, `users/$user.uid/events/$eventDate/items`)
  events.forEach( (doc) => 
  let event = doc.data()
  event.id = doc.id
  eventsOfTheDay.push( event )
  )
  
  eventData[ eventDate ] = eventsOfTheDay
  console.log("this are the eventsoftheday", eventsOfTheDay)

  )
  // now we can set it into a state that can be passed to components to be consumed by the calendar
  // eg setEvents( eventData )
  )
  

我没有从 eventsoftheday 获得任何价值,甚至连 consloge 字符串“this is eventsoftheday”都没有 谢谢 我得到这个错误 [未处理的承诺拒绝:FirebaseError:预期类型'ba',但它是:自定义Oa对象]

【问题讨论】:

也许我在这里很笨,但是代码中的路径是users/$user.uid/events/$eventDate/dayEvents,从控制台图像看起来路径是userTasks/$user.uid/events/$eventDate/items 是的,你是对的,我改变了,但仍然无法正常工作。将编辑帖子以更改它。谢谢。我收到此错误 [未处理的承诺拒绝:FirebaseError:预期类型'ba',但它是:自定义 Oa 对象] 这听起来像是与写操作有关的错误。 【参考方案1】:

getDocs 函数采用 Query 作为唯一参数,但您传递了两个参数。

const events = await getDocs(FSdb, `users/$user.uid/events/$eventDate/items`)

试着把上面的那行改成这样:

const events = await getDocs(
  collection(FSdb, `users/$user.uid/events/$eventDate/items`)
);
// ^^^
// add collection 

【讨论】:

以上是关于从反应原生/[未处理的承诺拒绝:FirebaseError:预期类型'ba',但它是:自定义Oa对象]中获取项目列表的主要内容,如果未能解决你的问题,请参考以下文章

反应本机中未处理的承诺拒绝错误?

反应本机获取多标记[未处理的承诺拒绝:TypeError:TypeError:未定义不是对象(评估'this.state.markers.map

未处理的承诺拒绝:TypeError:网络请求在expo react native 中失败

未处理的承诺拒绝,从 API 获取数据

条纹元素抛出“未处理的承诺拒绝”

(节点:32032)UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝 id:1):MongoError:身份验证失败