![](/img/trans.png)
[英]Returning value or object from Firebase cloud function is always null
[英]Returning empty result from equalTo in Firebase Cloud Function
當我的數據庫沒有等於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
來檢測是否存在子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'));
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.