आप लेन-देन के समान तरीके से लिखने के लिए काम करने के लिए एक अद्यतन काउंटर का उपयोग कर सकते हैं। (मैं नीचे कुछ छद्म कोड का उपयोग करने जा रहा हूं; इसके लिए खेद है, लेकिन मैं एक उदाहरण के लिए एक पूर्ण आरईएसटी एपीआई लिखना नहीं चाहता था।)
उदाहरण के लिए, यदि मेरे पास ऐसा कोई ऑब्जेक्ट है:
{
total: 100,
update_counter: 0
}
और इस तरह एक लिखने नियम:
{
".write": "newData.hasChild('update_counter')",
"update_counter": {
".validate": "newData.val() === data.val()+1"
}
}
मैं अब बस प्रत्येक ऑपरेशन के साथ update_counter में पास करके समवर्ती संशोधनों पर रोक सकता है।
var url = 'https://<INSTANCE>.firebaseio.com/path/to/data.json';
addToTotal(url, 25, function(data) {
console.log('new total is '+data.total);
});
function addToTotal(url, amount, next) {
getCurrentValue(url, function(in) {
var data = { total: in.total+amount, update_counter: in.update_counter+1 };
setCurrentValue(ref, data, next, addToTotal.bind(null, ref, amount, next));
});
}
function getCurrentValue(url, next) {
// var data = (results of GET request to the URL)
next(data);
}
function setCurrentValue(url, data, next, retryMethod) {
// set the data with a PUT request to the URL
// if the PUT fails with 403 (permission denied) then
// we assume there was a concurrent edit and we need
// to try our pseudo-transaction again
// we have to make some assumptions that permission_denied does not
// occur for any other reasons, so we might want some extra checking, fallbacks,
// or a max number of retries here
// var statusCode = (server's response code to PUT request)
if(statusCode === 403) {
retryMethod();
}
else {
next(data);
}
}
हाय मार्टिन, आप उस कामकाज की कल्पना कैसे करते हैं? ध्यान रखें कि लेन-देन आगे और आगे की चर्चा पर भरोसा करते हैं जहां ग्राहक डेटा सेट करने का प्रयास करता रहता है, सर्वर समवर्ती परिवर्तनों के साथ जवाब देता रहता है, और अंततः वे मूल्य पर व्यवस्थित होते हैं या हार मानते हैं। – Kato
हाय काटो, निश्चित रूप से, मैं एक ही चर्चा सर्वर-साइड को लागू करने की कोशिश कर रहा हूं। मैं जीईटी अनुरोध के माध्यम से फायरबेस के भीतर किसी ऑब्जेक्ट की वर्तमान स्थिति प्राप्त कर सकता हूं और फिर इसे PUT के माध्यम से बदल सकता हूं, लेकिन क्या यह जानने के लिए कोई तरीका है कि उस ऑब्जेक्ट को इस दौरान संशोधित किया गया है या नहीं? –
मुझे ऐसा नहीं लगता है; जो आरईएसटी के माध्यम से लेनदेन की कोशिश कर परेशानी का हिस्सा है। मुझे लगता है कि हम एक ऐसे समाधान को फेंक सकते हैं जो आसानी से लेनदेन को अनुकरण करता है। मुझे जवाब देने दो। – Kato