द्वारा अपडेट किया जा रहा है, मुझे लगता है कि firebase database
में एक सूची अपडेट करने के लिए subscription
पर कब्जा कर लिया जा रहा है जो उस सूची में सदस्यता लेता है। सूची आउटपुट मेरे फोन (ऐप में) जैसा दिखता है ... और जो मेरा कंसोल आउटपुट दिखता है (जिस तरह से यह दोहराता है) ऐसा लगता है कि यह पूरी सूची को कैप्चर कर रहा है और इसे प्रत्येक बार जोड़े जाने पर प्रदर्शित करता है। तो (मैं इस ऊपर देखा) ... मेरा मानना है कि इस समीकरण का प्रतिनिधित्व करता है क्या हो रहा है:फ़ायरबेस फ़ंक्शन निष्पादन और उस सूची में सदस्यता जिसे फ़ायरबेस फ़ंक्शन
(N(N + 1))/2
यह है कि कैसे आप में गणित कर एन 1 से संख्या के सभी का योग प्राप्त मेरी मामला (एन = 30 या तो), मुझे लगभग 465 प्रविष्टियां मिलती हैं ... ताकि आप देख सकें कि यह एक टन लोड हो रहा है, जब मैं केवल इसे पहले लोड करना चाहता हूं 10.
आउटपुट के साथ क्या हो रहा है यह दिखाने के लिए यहां पेस्टबिन https://pastebin.com/B7yitqvD है।
आउटपुट में length - 1 load
से ऊपर/उससे पहले की सरणी पर ध्यान देना। आप देख सकते हैं कि यह हर बार एक और प्रविष्टि के साथ एक सरणी लौट रहा है और इसे सूची में जोड़ रहा है। मैंने अपनी सूची में कितनी चीजें हैं, इसकी एक बहुत ही ग़लत गिनती की, और मुझे 440 मिल गया ... ताकि लगभग 465 नंबर से मेल खा सके।
घटनाओं की श्रृंखला एक पृष्ठ है कि इस समारोह के साथ सूची के साथ पेज नहीं है में शुरू होता है - जो firebase functions
तरफ छँटाई शुरू की:
let a = this.http.get('https://us-central1-mane-4152c.cloudfunctions.net/sortDistance?text='+resp.coords.latitude+':'+resp.coords.longitude+':'+this.username);
this.subscription6 = a.subscribe(res => {
console.log(res + "response from firesbase functions");
loading.dismiss();
}, err => {
console.log(JSON.stringify(err))
loading.dismiss();
})
यहाँ के साथ पृष्ठ पर समारोह है list
जो मुझे लगता है कि किसी कारण से पूरे प्रकार को कैप्चर कर रहा है। सदस्यता को firebase function
प्रकार के रूप में दोहराया जा रहा है, मुझे विश्वास है।
loadDistances() {
//return new Promise((resolve, reject) => {
let cacheKey = "distances"
let arr = [];
let mapped;
console.log("IN LOADDISTANCES #$$$$$$$$$$$$$$$$$$$$$");
console.log("IN geo get position #$$$$$$$5354554354$$$$$$$");
this.distancelist = this.af.list('distances/' + this.username, { query: {
orderByChild: 'distance',
limitToFirst: 10
}});
this.subscription6 = this.distancelist.subscribe(items => {
let x = 0;
console.log(JSON.stringify(items) + " length - 1 load");
items.forEach(item => {
let storageRef = firebase.storage().ref().child('/settings/' + item.username + '/profilepicture.png');
storageRef.getDownloadURL().then(url => {
console.log(url + "in download url !!!!!!!!!!!!!!!!!!!!!!!!");
item.picURL = url;
}).catch((e) => {
console.log("in caught url !!!!!!!$$$$$$$!!");
item.picURL = 'assets/blankprof.png';
});
this.distances.push(item);
if(x == items.length - 1) {
this.startAtKey4 = items[x].distance;
}
x++;
})
//this.subscription6.unsubscribe();
})
}
loadDistances
में subscription
समारोह ठीक जब तक मैं दूसरे पृष्ठ से सूची को अद्यतन नहीं करते के रूप में काम करता है - एक और संकेत है कि यह पूरी तरह कब्जा हो सकता है और बार-बार यह लिस्टिंग के रूप में यह क्रमबद्ध करता है।
मैंने कोशिश की है कि मैं अपडेट के बाद सूची से unsubscribe
पर विचार कर सकता हूं ... तो फिर मैं अद्यतन के ठीक बाद की बजाय सूची में प्रवेश के साथ अगली बार 10 की सूची लोड कर सकता था (बार बार)। मुझे पता है कि firebase functions
beta
में है। क्या यह उनकी तरफ एक बग हो सकता है? यहाँ मेरी firebase functions
कोड है:
exports.sortDistance = functions.https.onRequest((req, res) => {
// Grab the text parameter.
var array = req.query.text.split(':');
// Push the new message into the Realtime Database using the Firebase Admin SDK.
// Get a database reference to our posts
var db = admin.database();
var ref = db.ref("profiles/stylists");
var promises = [];
// Attach an asynchronous callback to read the data at our posts reference
ref.on("value", function(snapshot) {
//console.log(snapshot.val());
var snap = snapshot.val();
for(const user in snap) {
promises.push(new Promise(function(resolve, reject) {
var snapadd = snap[user].address;
console.log(snapadd + " snap user address (((((((())))))))");
if(snapadd != null || typeof snapadd != undefined) {
googleMapsClient.geocode({
address: snapadd
}).asPromise()
.then(response => {
console.log(response.json.results[0].geometry.location.lat);
console.log(" +++ " + response.json.results[0].geometry.location.lat + ' ' + response.json.results[0].geometry.location.lng + ' ' + array[0] + ' ' + array[1]);
var distanceBetween = distance(response.json.results[0].geometry.location.lat, response.json.results[0].geometry.location.lng, array[0], array[1]);
console.log(distanceBetween + " distance between spots");
var refList = db.ref("distances/"+array[2]);
console.log(snap[user].username + " snap username");
refList.push({
username: snap[user].username,
distance: Math.round(distanceBetween * 100)/100
})
resolve();
})
.catch(err => { console.log(err); resolve();})
}
else {
resolve();
}
}).catch(err => console.log('error from catch ' + err)));
//console.log(typeof user + 'type of');
}
var p = Promise.all(promises);
console.log(JSON.stringify(p) + " promises logged");
res.status(200).end();
}, function (errorObject) {
console.log("The read failed: " + errorObject.code);
});
});
क्या अजीब है, है जब मैं firebase functions
लॉग की जांच, यह सब केवल एक बार चलाने के लिए प्रकट होता है ... लेकिन मैं अब भी लगता है सदस्यता में पूरे छंटाई प्रक्रिया पर कब्जा किया जा सकता है तेजी से इसे लौटने के दौरान कुछ अजीब तरीका। जैसा कि मुझे लगता है कि जितना संभव हो उतना स्पष्ट होना चाहिए - मुझे लगता है कि इस तरह के प्रत्येक चरण को (N(N + 1))/2
में कैप्चर किया जा रहा है ... 1 से शुरू होता है और लगभग 30 तक जाता है ... और सॉर्टिंग का योग समाप्त होता है मेरी सूची की लंबाई (1-10 वस्तुओं के साथ बार-बार दोहराया जाता है)।
यह प्रश्न] (https://stackoverflow.com/q/47561946/4815718) कि उसने समस्या का समाधान नहीं किया है, आपको अभी भी '()' के बजाय 'एक बार()' का उपयोग करना चाहिए: 'ref.on ("मूल्य", समारोह (स्नैपशॉट) '। –
मैं करने की कोशिश की है कि ... और यह यह लगता कुछ भी नहीं चलाता है की तरह बनाया ... बीमार इसे फिर से कोशिश ... और पुनः जाँच firebase समारोह लॉग अगर कुछ भी निष्पादित हो जाता है देखने के लिए और मैं ts बस अपना एप्लिकेशन – ewizard
में नहीं दिख रहा asynch संचालन की संख्या बड़े हो जाता है, के रूप में यह बादल समारोह 'sortDistance' में है, यह सब वादे सही ढंग से श्रृंखला मुश्किल है। ऐसा लगता है कि आपने कोशिश की है, लेकिन कुछ मिस्ड हैं, उदाहरण के लिए यहां: 'refList.push (...) '। –