Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Επιθετικό το ποστ μου επειδή αναρρωτιέμαι πώς μπορεί η προτροπή για αλλαγή framework σε κάτι όσο immature είναι η deno να βοηθήσει τον ΤΣ. Μάλιστα. Keep trolling.

Δημοσ. (επεξεργασμένο)

@skiabox Ευχαριστώ για την απάντηση αλλά όντως o κώδικας είναι μόνο front-end. Εφόσον έχω λύση στη javascript δεν με ενδιαφέρει να χρησιμοποιήσω-μάθω  κάποια άλλη τεχνολογία ειδικά όταν είναι μόνο και μόνο να λύσω ένα συγκεκριμένο πρόβλημα. Εδώ δεν μπορώ να καταλάβω αυτά της js και ας την χρησιμοποιώ κάτι χρόνια τώρα φαντάσουν να πάω αλλού.  

@Xvipes @t(o.ot) Ευχαριστώ για την απαντήσεις στη ερώτηση.

Xvipes  αν μπορούσες λίγο να περιγράψεις τι γίνεται  στον κώδικα ή να δώσεις κάποια πηγή

const get_from_curl = async(immo) =>

έτσι δηλαδή δημιουργείται μία async function

Μετά εδώ η map επιστρέφει τι; promises;

const immosPromises = immos.map(get_from_curl);

και εδώ ;

const scores = await Promise.all(immosPromises).then(res => Promise.all(res.map(r => r.text())));

Επεξ/σία από k33theod
Δημοσ. (επεξεργασμένο)
46 minutes ago, k33theod said:

@skiabox Ευχαριστώ για την απάντηση αλλά όντως o κώδικας είναι μόνο front-end. Εφόσον έχω λύση στη javascript δεν με ενδιαφέρει να χρησιμοποιήσω-μάθω  κάποια άλλη τεχνολογία ειδικά όταν είναι μόνο και μόνο να λύσω ένα συγκεκριμένο πρόβλημα. Εδώ δεν μπορώ να καταλάβω αυτά της js και ας την χρησιμοποιώ κάτι χρόνια τώρα φαντάσουν να πάω αλλού.  

@Xvipes @t(o.ot) Ευχαριστώ για την απαντήσεις στη ερώτηση.

Xvipes  αν μπορούσες λίγο να περιγράψεις τι γίνεται  στον κώδικα ή να δώσεις κάποια πηγή


const get_from_curl = async(immo) =>

έτσι δηλαδή δημιουργείται μία async function

Μετά εδώ η map επιστρέφει τι; promises;


const immosPromises = immos.map(get_from_curl);

και εδώ ;

const scores = await Promise.all(immosPromises).then(res => Promise.all(res.map(r => r.text())));

 

const get_from_curl = async(immo) =>

- "έτσι δηλαδή δημιουργείται μία async function"
αυτό ακριβώς.
 

 - "Μετά εδώ η map επιστρέφει τι; promises;"

const immosPromises = immos.map(get_from_curl);

αυτό ακριβώς.
Επιστρέφει array από promises με σεταρισμένα params που δεν έχουν εκτελεστεί ακόμα για να τις εκτελέσει η Promise.all όλες μαζί παράλληλα.
 

const scores = await Promise.all(immosPromises).then(res => Promise.all(res.map(r => r.text())));

Εδώ είναι λίγο περίεργο αλλά πρακτικά εκτελούνται όλα τα promises και μετά για κάθε ένα αποτέλεσμα αυτών εκτελείτε ασύγχρονα το .text() της κάθε μίας.

Αυτό εδώ πιο αναλυτικά θα μπορούσε να γραφτεί:

const scoreResults = await Promise.all(immosPromises); // Εκτελούμε ολα τα requests

const scoreResultText = scoreResults.map(score => score.text); // Φτιάχνουμε ένα array με τα promises του text των αποτελεσμάτων.

const scoresArray = await Promise.all(scoreResultText);// Εκτελούμε ολα τα text()

Και οι άλλοι τρόποι που είπαν τα παιδιά είναι μια χαρά απλά με το Promise.all κερδίζεις ότι εκτελούνται παράλληλα όλα τα requests(θεωρώ πως αυτό είναι εφικτό βάσει του κώδικά σου μιας και από ότι καταλαβαίνω δε χρειάζεσαι το αποτέλεσμα του ενός για να εκτελέσεις το επόμενο).

Πηγή: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

p.s Κρατάω τις επιφυλάξεις μου για το ότι εκτελούνται παράλληλα :D 

Επεξ/σία από Xvipes
  • Thanks 1
Δημοσ. (επεξεργασμένο)
  •  
Δημοσ. πριν από 13 λεπτά (επεξεργασμένο)
17 λεπτά πριν, Xvipes είπε

Και οι άλλοι τρόποι που είπαν τα παιδιά είναι μια χαρά απλά με το Promise.all κερδίζεις ότι εκτελούνται παράλληλα όλα τα requests(θεωρώ πως αυτό είναι εφικτό βάσει του κώδικά σου μιας και από ότι καταλαβαίνω δε χρειάζεσαι το αποτέλεσμα του ενός για να εκτελέσεις το επόμενο)

Σωστό είναι ανεξάρτητα το ένα από το άλλο. Ευχαριστώ

Επεξ/σία από k33theod
Δημοσ. (επεξεργασμένο)
Στις 27/5/2020 στις 10:31 ΠΜ, Xvipes είπε

const immosPromises = immos.map(get_from_curl);

αυτό ακριβώς.
Επιστρέφει array από promises με σεταρισμένα params που δεν έχουν εκτελεστεί ακόμα για να τις εκτελέσει η Promise.all όλες μαζί παράλληλα.

Μια μικρή διόρθωση, η Promise.all δεν εκτελεί τις Promises.

Οι Promises ξεκινούν την εκτέλεσή τους την στιγμή της δημιουργίας τους (στην συγκεκριμένη περίπτωση με την map).

Με άλλα λόγια αν ανάμεσα στην map και στην Promise.all υπήρχαν άλλες 10 -15 εντολές , οι Promises θα συνέχιζαν κανονικά το παράλληλο τρέξιμό τους.

Η Promise.all απλά είναι ένας τρόπος για να ειδοποιηθούμε ότι ολοκληρώθηκαν όλες ή κάποια απέτυχε.

πηγή : https://stackoverflow.com/a/30823708

Επεξ/σία από denbootarei

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...