gpt4 book ai didi

javascript - 从 Firebase Cloud Function 中的 equalTo 返回空结果

转载 作者:行者123 更新时间:2023-12-01 01:39:40 25 4
gpt4 key购买 nike

我需要处理当我的数据库没有 equalTo() 的任何匹配结果时的情况。目前,下面的代码仅在我有匹配项时才返回,如果没有匹配项,则根本不返回。请告知如何处理?

function getActivitySurvey(pin) {
return new Promise((resolve, reject) => {
var ref = admin.database().ref("activity-survey");
ref.orderByChild("pin").equalTo(pin.toString()).once('child_added')
.then((snapshot) => {
if (snapshot) {
resolve(snapshot);
} else {
reject(new Error('No ActivitySurvey'));
}
}).catch( () => {
reject(new Error('No snapshot'));
})
})
}

编辑:此后,我将代码修改为如下所示,如果指定了数据库中不存在的 pin 值,则输出到控制台的唯一行是“getActivitySurvey”,该函数最终会超时但不会超时返回:

function getActivitySurvey(pin) {
return new Promise((resolve, reject) => {
console.log('getActivitySurvey')
var ref = admin.database().ref("activity-survey");
ref.orderByChild("pin").equalTo(pin.toString()).once('child_added').then((snapshot) => {
console.log('have snapshot')
if (snapshot.exists()) {
resolve(snapshot);
} else {
console.log('Rejecting ActivitySurvey')
reject('error');
}
}).catch( (err) => {
console.log('Caught error')
reject('err');
})
})
}

最佳答案

仅使用 child_added 监听器无法检测子项是否存在。您需要为此使用 value 监听器。

例如:

ref.orderByChild("pin").equalTo(pin.toString())
.once('child_added')
.then((snapshot) => {
resolve(snapshot);
});
ref.orderByChild("pin").equalTo(pin.toString()).limitToFirst(1)
.once('value')
.then((snapshot) => {
if (!snapshot.exists()) {
reject(new Error('No ActivitySurvey'));
}
});

或者只有一个查询:

ref.orderByChild("pin").equalTo(pin.toString()).limitToFirst(1)
.once('value')
.then((snapshot) => {
if (snapshot.exists()) {
snapshot.forEach(function(child) { // will loop only once, since we use limitToFirst(1)
resolve(child);
});
}
else {
reject(new Error('No ActivitySurvey'));
}
});

关于javascript - 从 Firebase Cloud Function 中的 equalTo 返回空结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52533515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com