11

मैं लेनदेन वादा वापस करता हूं जो फ़ंक्शन को रोकने से पहले लेनदेन के समाप्त होने की प्रतीक्षा करनी चाहिए। लेनदेन ठीक निष्पादित करता है, लेकिन वादा कभी हल नहीं होता है।फायरबेस के लिए क्लाउड फ़ंक्शंस ऑन्राइट टाइमआउट

मैं फ़ायरबेस कंसोल में देखता हूं कि यह कार्य 60 के दशक के बाद हमेशा समाप्त होता है।

const functions = require('firebase-functions'); 
const admin = require("firebase-admin"); 
const db = admin.database(); 


export let countFollowers = functions.database.ref('followers/{followee}/{follower}').onWrite(event => { 
    const followee = event.params.followee; 
    let path = `posts/${followee}/cnt_foll`; 
    const countRef = db.ref(path); 
    let out = countRef.transaction(current => { 
     if (event.data.exists() && !event.data.previous.exists()) { 
      return (parseInt(current) || 0) + 1; 
     } else if (!event.data.exists() && event.data.previous.exists()) { 
      return (parseInt(current) || 0) - 1; 
     } 
    }); 

    return out; 
}); 

संपादित करें:

मैं के साथ समस्या का समाधान निम्नलिखित "हैक", मैं, एक वादा अपने आप बनाते हैं, क्योंकि जो कुछ भी .transaction लौटा रहा है काम नहीं कर रहा:

return new Promise(function(resolve, reject) { 
    countRef.transaction(current => { 
     if (event.data.exists() && !event.data.previous.exists()) { 
      return (parseInt(current) || 0) + 1; 
     } else if (!event.data.exists() && event.data.previous.exists()) { 
      return (parseInt(current) || 0) - 1; 
     } 
    },() => resolve(null)); 
}); 
+1

यह 'फायरबेस' लाइब्रेरी के साथ ही एक समस्या की तरह दिखता है। –

+0

यह "हैक" ने मेरे क्लाउड फ़ंक्शन के निष्पादन समय को काफी कम किया। –

+3

किसी कारण से, यदि आप 'फिर' कहते हैं तो यह काम करता है। उदाहरण 'countRef.transaction (वर्तमान => {..})। फिर (() => {console.log ("लेनदेन समाप्त हुआ")}) – Christian

उत्तर

4

वहाँ एक में जाना जाता था फायरबेस-एडमिन एसडीके के पुराने संस्करणों के साथ जारी करें जहां फायरबेस डाटाबेस संदर्भ और स्नैपशॉट JSON क्रमबद्ध नहीं हो सकते हैं और इस प्रकार क्लाउड फ़ंक्शंस के लिए रिटर्न मानों में उपयोग नहीं किया जा सकता है। इसमें लेनदेन वापसी मूल्य शामिल हैं क्योंकि उनके पास स्नैपशॉट भी हैं।

आपका हैक बग के आसपास काम करता है; यदि आप फ़ायरबेस-एडमिनिस्ट्रेशन के अपने संस्करण को अपडेट करते हैं तो आपको फिक्स भी मिलना चाहिए।

+0

ठीक है, नवीनतम' फायरबेस-एडमिन 'पर अपडेट करने का प्रयास करेगा '4.1.4', मैं संस्करण' 4.1.3' बीटीडब्ल्यू –

+1

का उपयोग कर रहा हूं मुझे नवीनतम संस्करण 4.1.4 के साथ एक ही समस्या है। मैं प्रदान किए गए उदाहरण का पालन कर रहा था: https://github.com/firebase/functions-samples/blob/master/child-count/functions/index.js – dardub

+0

मैं पुष्टि कर सकता हूं कि यह अभी भी 'फ़ायरबेस-एडमिन' ' 4.1.4' और 'फायरबेस-फ़ंक्शन' '0.5.4' –

संबंधित मुद्दे