2013-02-15 15 views
5

मैं निम्नलिखित संरचना है कहते हैं:फायरबेस: लेनदेन में कैसे धक्का देना है?

{ 
    "-InSwU2yHOEHwhP_m4_n" : { 
    ".priority" : 0.0, 
    "name" : "abc" 
    }, 
    "-InSw_P0j8A-0Njj0Uvf" : { 
    ".priority" : 1.0, 
    "name" : "def" 
    } 
} 

मैं के साथ एक और इसी तरह आइटम जोड़ने के लिए चाहते हैं एक guid एक महत्वपूर्ण और प्राथमिकता वर्तमान में प्रस्तुत (इस मामले 2 में) मदों की संख्या के बराबर है।

{ 
    "-InSwU2yHOEHwhP_m4_n" : { 
    ".priority" : 0.0, 
    "name" : "abc" 
    }, 
    "-InSw_P0j8A-0Njj0Uvf" : { 
    ".priority" : 1.0, 
    "name" : "def" 
    }, 
    "-InSxV-RVkZ07_f3uDnJ" : { 
    ".priority" : 2.0, 
    "name" : "ghi" 
    } 
} 

ध्यान दें कि जब से कई ग्राहकों एक ही समय में इस तरह के आइटम जोड़ने के लिए कोशिश कर सकते, यह एक लेन-देन होना चाहिए: परिणाम कुछ इस तरह दिखना चाहिए।

कोई भी विचार?

उत्तर

3

जब आप push() का उपयोग करते हैं, तो प्रत्येक आइटम को एक अद्वितीय आईडी असाइन की जाती है। तो एक लेनदेन जरूरी नहीं होगा (टकराव नहीं हो सकता है)।

यदि आप प्राथमिकता से रिकॉर्ड अद्वितीय होना चाहते हैं (जो कि आप जो पूरा करने की कोशिश कर रहे हैं, ऐसा लगता है) मुझे लगता है कि आपको बस आईडी के रूप में प्राथमिकता का उपयोग करना चाहिए।

तो क्या आप वाकई दो ग्राहकों एक ही समय में धक्का नहीं है बनाने के लिए एक लेन-देन का उपयोग कर सकते हैं:,

FB.child(path).transaction(function(current_val) { 
    if(current_val === null) { 
     /* set the value here */ 
    } 
    /* do nothing; transaction fails because it was already written */ 
}, function(success) { 
    /* transaction done */ 
}); 

लेकिन यदि आप एक अद्वितीय ID के रूप में प्राथमिकता का उपयोग कर रहे हैं, शायद यह पुन: कल्पना करने की जरूरत है ; यह वास्तव में आईडी नौकरी है और यह एक महान काम करता है; अभिलेखों को उनके आदेश में भी बनाए रखा जाता है ताकि अधिकांश मामलों में काउंटर अनावश्यक हो।

+0

धन्यवाद काटो! मुझे यह भी ध्यान रखना चाहिए कि यदि आप पुश() का उपयोग करते हैं, तो आइटम उस क्रम में दिखाई देंगे जिसमें उन्हें जोड़ा गया था (जब तक उन्हें एक ही ग्राहक से धक्का दिया गया था। अन्य क्लाइंटों ने घड़ियों को छीन लिया होगा, जिन्हें हम क्षतिपूर्ति करने की कोशिश करते हैं , लेकिन हमेशा 100% सफलतापूर्वक नहीं)। –

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