Firebase -Geofire 和云功能。功能结束是否意味着不再有听众?
Firebase - Geofire and Cloud Functions. Does end of function means no more listeners?
在我的云函数的 index.js
文件中,我有以下函数体:
exports.onSuggestionCreated = functions.firestore.document('suggestions/{userId}').onCreate(event => {
return admin.firestore().doc(`places/settings/profile`).get().then(doc => {
[...]
const location = data.location
const ref = admin.database().ref(`suggestion_locations`)
const geoFire = new GeoFire(ref)
var geoQuery = geoFire.query({
center: [location.latitude, location.longitude],
radius: 1.0
})
geoQuery.on("key_entered", function(key, location, distance) {
return sendMessageTo(key, title, body)
})
})
})
这是一个函数,每当创建东西时都会触发该函数。
我想知道的是,即使云功能早已终止,每当有东西进入由 GeoFire
的位置和半径分隔的区域时,是否会调用 "key_entered"?我收到一些奇怪的日志表明如此。
考虑到 GeoFire
的异步性质,在这种情况下我能做什么?
GeoFire 依赖于范围内的 keeping active listeners on the geodata。这与 Cloud Functions 的 run-and-exit 范式不匹配。
概念(在 geohashes 中存储经纬度和 运行 范围查询)工作正常,但您可能需要修改库或注意其实现细节以使其在您的情况下工作.
最好的似乎是return,例如当前在给定区域内的所有位置。这可以通过监听 key_entered
事件(就像你已经做的那样) 和 到 ready
事件来完成,其中 fires after the initial key_entered
calls have been received.
exports.onSuggestionCreated = functions.firestore.document('suggestions/{userId}').onCreate(event => {
return admin.firestore().doc(`places/settings/profile`).get().then(doc => {
[...]
const location = data.location
return new Promise(function(resolve, reject) {
const ref = admin.database().ref(`suggestion_locations`)
const geoFire = new GeoFire(ref)
var geoQuery = geoFire.query({
center: [location.latitude, location.longitude],
radius: 1.0
})
geoQuery.on("key_entered", function(key, location, distance) {
sendMessageTo(key, title, body)
})
geoQuery.on("ready", function() {
resolve();
});
});
})
})
在我的云函数的 index.js
文件中,我有以下函数体:
exports.onSuggestionCreated = functions.firestore.document('suggestions/{userId}').onCreate(event => {
return admin.firestore().doc(`places/settings/profile`).get().then(doc => {
[...]
const location = data.location
const ref = admin.database().ref(`suggestion_locations`)
const geoFire = new GeoFire(ref)
var geoQuery = geoFire.query({
center: [location.latitude, location.longitude],
radius: 1.0
})
geoQuery.on("key_entered", function(key, location, distance) {
return sendMessageTo(key, title, body)
})
})
})
这是一个函数,每当创建东西时都会触发该函数。
我想知道的是,即使云功能早已终止,每当有东西进入由 GeoFire
的位置和半径分隔的区域时,是否会调用 "key_entered"?我收到一些奇怪的日志表明如此。
考虑到 GeoFire
的异步性质,在这种情况下我能做什么?
GeoFire 依赖于范围内的 keeping active listeners on the geodata。这与 Cloud Functions 的 run-and-exit 范式不匹配。
概念(在 geohashes 中存储经纬度和 运行 范围查询)工作正常,但您可能需要修改库或注意其实现细节以使其在您的情况下工作.
最好的似乎是return,例如当前在给定区域内的所有位置。这可以通过监听 key_entered
事件(就像你已经做的那样) 和 到 ready
事件来完成,其中 fires after the initial key_entered
calls have been received.
exports.onSuggestionCreated = functions.firestore.document('suggestions/{userId}').onCreate(event => {
return admin.firestore().doc(`places/settings/profile`).get().then(doc => {
[...]
const location = data.location
return new Promise(function(resolve, reject) {
const ref = admin.database().ref(`suggestion_locations`)
const geoFire = new GeoFire(ref)
var geoQuery = geoFire.query({
center: [location.latitude, location.longitude],
radius: 1.0
})
geoQuery.on("key_entered", function(key, location, distance) {
sendMessageTo(key, title, body)
})
geoQuery.on("ready", function() {
resolve();
});
});
})
})