1

突然、私の機能を展開した後、突然何らかの機能が突然タイムアウトになりました。クラウド機能のコンソールでこれを見ることができます。これは、入れ子にして約束を返すときに起こるようです。奇妙なことにこれは以前に起こったことではありません。Firebaseのクラウド機能が突然タイムアウトしました

ここに私のコードです。

exports.pushMessageQueue = functions.database.ref('/userPushMessagesQueue/{userId}/{messageId}').onWrite(event => { 
    if (!event.data.exists()) { 
     console.log('DOES NOT EXIST!'); 
     return "not exists"; 
    } 

    console.log("EXISTS!"); 

    const userId = event.params['userId']; 
    const messageId = event.params['messageId']; 

    const payload = event.data.val(); 

    return database.ref('devices').orderByChild('user_id').equalTo(userId).once('value', snapshot => { 
     if (!snapshot.exists()) { 
      return "no devices found"; 
     } 

     const devices = snapshot.val(); 

     const deviceTokens = []; 

     snapshot.forEach(deviceSnap => { 
      const device = deviceSnap.val(); 
      deviceTokens.push(device['fcm_key']); 
     }); 

     const removeFromQueue = database.ref(`/userPushMessagesQueue/${userId}/${messageId}`); 

     console.log('then0'); 

     return removeFromQueue.set(null).then(() => { 
      console.log('then1'); 
      return admin.messaging().sendToDevice(deviceTokens, payload).then(() => { 
       console.log('then2'); 
       return "send"; 
      }); 
     }, (error) => { 
      console.log('error1!'); 
      console.log(error); 
     }); 
    }); 
}); 

コンソールでは、then1とthen2ではなく、0が記録されます。そして私はプッシュ通知を受信し、エントリはキューから削除されます。

私が間違っていることはありますか?

+1

。利用可能な修正はありますか? –

答えて

3

あなたはpromiseチェーンではなくonce()関数を返しています。

基本的に、あなたはこれを書いている:

//returns the once promise 
return ref.once('value', function(snap) { 
    /* some stuff that doesn't affect the promise chain happens here */ 
}); 

何を望んでいたが、この場合は:私は私のFirebaseクラウド機能と同様の問題を経験してきた今日ので

// returns whatever happens in the .then() callback 
return ref.once('value').then(snap => { 
    /* now whatever you return here affects the promise chain */ 
}); 
関連する問題