It is currently 22 April 2025, 19:12 Advanced search

Funzioni asincrone su server script

Domande e risposte su come utilizzare Instant Developer Cloud al meglio

Funzioni asincrone su server script

Postby d.termini » 23 January 2020, 16:59

Sempre più difficile.

Ho uno script lato server che definisce un set di funzioni in una classe.
Le funzioni sincrone funzionano benissimo, quelle asincrone vengono eseguite ma non ritorna mai al chiamante, l'applicazione si ferma lì e basta, nessun log.

Script server
Code: Select all
var MyObj = function MyObj() {
  ..variabili globali..
  return {
    init: function(a,b,c) { ..imposto le variabili globali.. },
    funzioneAsincrona1: async function(args) {
      ..chiamate a varie funzioni asincrone delle librerie..
      console.log('qui ci arriva');
      return result; // <- risultato delle precedenti funzioni asincrone
    },
    funzioneAsincrona2: async (args) => {
      ..chiamate a varie funzioni asincrone delle librerie..
      console.log('qui ci arriva');
      return result; // <- risultato delle precedenti funzioni asincrone
    }
  }
}


le funzioni asincrone 1 e 2 sono identiche, ho solo provato a definirle diversamente

Su InDe in un metodo chiamo quindi
Code: Select all
var myobj = new MyObj();
myobj.init(a,b,c);
var result = yield myobj.funzioneAsincrona1({roba});
console.log('questo non lo stampa');


Idee?
d.termini
 
Posts: 1640
Joined: 13 November 2017, 8:41

Re: Funzioni asincrone su server script

Postby r.zambito » 27 January 2020, 14:19

Buonasera, la classe MyObj è mappata come "classe"? se sì, le funzioni asincrone che chiama hanno come ultimo parametro un parametro di tipo function?

Grazie.
r.zambito
 
Posts: 122
Joined: 17 June 2014, 7:38

Re: Funzioni asincrone su server script

Postby d.termini » 27 January 2020, 14:29

Sì, sono mappate nella classe e hanno un parametro "args" di tipo object (che uso per passare gli argomenti) e un parametro callback di tipo function, la funzione è impostata come asincrona.
Mi pareva di aver indicato anche il tipo ritornato (array) ma si vede che nelle prove l'ho perso per strada.
Tra async/await, yield e Promise sto facendo una bella confusione :P
d.termini
 
Posts: 1640
Joined: 13 November 2017, 8:41

Re: Funzioni asincrone su server script

Postby r.zambito » 27 January 2020, 14:47

Al'interno del server script quando la function deve restituire il valore chiami la funzione passata come parametro? non devi usare il return in quel caso.
r.zambito
 
Posts: 122
Joined: 17 June 2014, 7:38

Re: Funzioni asincrone su server script

Postby d.termini » 27 January 2020, 15:19

Quindi non è possibile usare le funzioni asincrone pure ma si può solo fare tramite callback?
d.termini
 
Posts: 1640
Joined: 13 November 2017, 8:41

Re: Funzioni asincrone su server script

Postby r.zambito » 27 January 2020, 16:43

d.termini wrote:Quindi non è possibile usare le funzioni asincrone pure ma si può solo fare tramite callback?

Ora penso di aver capito le tue esigenze. No, è possibile usarle, l'unica cosa da fare è gestire la callback per poter farli funzionare usando lo yield di Inde Cloud.

Per prima cosa togli l'async dai metodi che esponi, ma lo lasci nei metodi interni.
Poi dai metodi esposti gestisci il .then .catch facendo tornare opportunamente la callback passata come parametro:

Code: Select all
(function(global){
   ...
async trulyAsyncF(opts) {
  try {
    // fai quello che vuoi
    return result;
  } catch (err) {
   throw Error(<errore>);
  }
};   

var MyObj = function MyObj() {
  ..variabili globali..
  return {
   ....
    funzioneAsincrona1: function(args,callback) {
        // Chiami la vera e propria funzione async gestendo il then ed il catch, nei quali chiami la callback
         trulyAsyncF(opts).then(res => callback(res)).catch(err => callback(null,err));
    },
  }
}
r.zambito
 
Posts: 122
Joined: 17 June 2014, 7:38

Re: Funzioni asincrone su server script

Postby d.termini » 27 January 2020, 17:00

r.zambito wrote:
d.termini wrote:Quindi non è possibile usare le funzioni asincrone pure ma si può solo fare tramite callback?

Ora penso di aver capito le tue esigenze. No, è possibile usarle, l'unica cosa da fare è gestire la callback per poter farli funzionare usando lo yield di Inde Cloud.

Per prima cosa togli l'async dai metodi che esponi, ma lo lasci nei metodi interni.
Poi dai metodi esposti gestisci il .then .catch facendo tornare opportunamente la callback passata come parametro:

Code: Select all
(function(global){
   ...
async trulyAsyncF(opts) {
  try {
    // fai quello che vuoi
    return result;
  } catch (err) {
   throw Error(<errore>);
  }
};   

var MyObj = function MyObj() {
  ..variabili globali..
  return {
   ....
    funzioneAsincrona1: function(args,callback) {
        // Chiami la vera e propria funzione async gestendo il then ed il catch, nei quali chiami la callback
         trulyAsyncF(opts).then(res => callback(res)).catch(err => callback(null,err));
    },
  }
}


Buono a sapersi, lo vedo bene domani nell'assistenza
Grazie
d.termini
 
Posts: 1640
Joined: 13 November 2017, 8:41

Re: Funzioni asincrone su server script

Postby d.termini » 28 January 2020, 14:00

Abbiamo visto il caso in assistenza e scritto il codice nel modo corretto utilizzabile da InDe come indicato da Riccardo.
d.termini
 
Posts: 1640
Joined: 13 November 2017, 8:41


Return to Tips & Tricks - Cloud

Who is online

Users browsing this forum: No registered users and 24 guests