Firebase实时数据库中的once和on有什么区别?

4

我正在使用Firebase实时数据库作为API的数据库。

once()on()有什么不同?

我的once()代码运行速度非常慢。

off()是用来做什么的?

示例

router.get('/:qrid', async(req, res)=>{
    let id = req.params.qrid;
    let ref = firebase.database().ref('/qr/'+id);
    let snapshot = await ref.once('value');
    res.json(Object.assign({}, snapshot.val()));
});

这项工作非常缓慢(250毫秒-3000毫秒)。当我使用on()时,一切都变得更快了。
router.get('/:qrid',(req, res)=>{
    let id = req.params.qrid;
    let ref = firebase.database().ref('/qr/'+id);
    ref.on('value',(snapshot) => res.json(Object.assign({}, snapshot.val())));
});
1个回答

5

文档中的内容:

once:

once(eventType: EventType, successCallback?: function, failureCallbackOrContext?: function | Object | null, context?: Object | null): Promise<DataSnapshot>

监听指定事件类型的一次事件,然后停止监听。

这相当于在回调函数中调用 on(),然后调用 off()。有关事件类型的详细信息,请参见 on()。

on:

on(eventType: EventType, callback: function, cancelCallbackOrContext?: Object | null, context?: Object | null): function

监听特定位置的数据更改。

这是从数据库读取数据的主要方式。您的回调将在初始数据和每次数据更改时触发。使用 off( ) 停止接收更新。

off() 用于分离先前使用 on() 连接的回调函数。

您可以查看参考文献:

https://firebase.google.com/docs/reference/js/firebase.database.Reference.html


我阅读了文档,但这并不是我的问题的答案。对于 API,我应该使用 off() 吗?如果我从未使用过 off(),那么我的 Node.js 服务器将始终连接到 Firebase,并且请求会更快吗? - Артём Котов
1
如果您不使用 off(),请求不会更快。通常在离开页面时使用 off() 来取消订阅监听器并避免内存泄漏。 - Peter Haddad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接