繁体   English   中英

从Firebase Cloud函数中的equalTo返回空结果

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM