本篇将介绍个人撰写,稍后会于网页聊天室会用到的javaScript方法
对firestore文件有兴趣的朋友,看这里
检查Collection是否存在本方法传入firestore的SDK建立的collectionDocument
.get()
方法会回传Promise呼叫成功后获得QuerySnapshot
物件,其中的empty
属性为布林值,true表示该collection为空,反之存在.get()可传入物件参数,本方法传递的{ source: 'server' }
表示只取得伺服器的资料,否则他可能会取得cache或本地资料,如此无从判断该collection是否已存在伺服器中在这里定义了callback
与fail
两个回调函式,用以取得异步呼叫的结果,当Promise成功时调用callback
,失败时调用fail
var CollectionExisted = (collection, callback, fail) => { try { collection.get({ source: 'server' }) .then( result => { callback(!result.empty); }, err => { fail(err); } ); } catch (e) { console.log(`CollectionExisted Error: ${e}`); }}
取得collection下所有document传递firestore的SDK建立的collection定义callback
与fail
回调函式定义预设为空字串的参数orderByField
,用以指定查询资料的排序的栏位(field
)名称调用collection.get()
方法取得资料,若orderByField不为空,加上.orderBy(orderByField)
排序查询的资料var GetRecords = (collection, callback, fail, orderByField = '') => { try { var query = null; if (orderByField) { query = collection.orderBy(orderByField).get({ source: 'server' }); } else { query = collection.get({ source: 'server' }); } query.then( result => { callback(result); }, err => { fail(err); } ); } catch (e) { console.log(`GetRecords Error: ${e}`); }}
写入资料传递firestore的SDK建立的collection定义callback
与fail
回调函式data为要写入document的资料呼叫collection.add()
方法将资料写入collection中,伺服器会为该document建立维一值的ID,写入的资料便在该document下本Promise成功时回传DocumentReference
,该物件下有许多属性可供使用,如.id
为该新建立Document的idvar InsertData = (collection, data, callback, fail) => { try { collection.add(data) .then( result => { callback(result); }, err => { fail(err); } ); } catch (e) { console.log(`InsertData Error: ${e}`); }}
监听collection变化传递firestore的SDK建立的collection定义callback
与fail
回调函式sortField
排序栏位名称,其不为空时调用collection.orderBy(sortField)
呼叫collection.onSnapshot()
,为QuerySnapshot
事件附加监听器,该监听器可透过呼叫onSnapshot
回传的方法卸除当collection发生变化(新增/删除/修改)便会调用回传物件的.docChanges()
,该方法可取得变化的资料,型别为阵列,这里透过.forEach()逐一取出并调用callback做下一步处理var ListenToAllChange=(collection,callback,fail,sortField='')=>{ try{ var query=collection; if(sortField){ query=query.orderBy(sortField); } query.onSnapshot(querySnapshot=>{ querySnapshot.docChanges().forEach(ele=>{ callback(ele); }); }, err=>{ fail(err); }); }catch(e){ console.log(`ListenToAllChange Error: ${e}`); }}