Effettuare più chiamate asincrone per recuperare il risultato di molteplici servizi nel singolo clic di un pulsante in flessione?

StackOverflow https://stackoverflow.com/questions/4541281

Domanda

In uno dei nostri progetti stiamo usando Flex per front-end, BlazeDS / java nel backend. Il suo un codice esistente in cui sono già pronti i servizi. Devo effettuare chiamate verso 3 servizi nel backend (fondamentalmente 3 oggetti remoti) e ottenere il loro risultato e salvare il risultato in un oggetto e visualizzare i dati di questo oggetto in una vista. Ora, in front-end che stiamo usando Flex e prezzemolo Framework. Stavo pensando di approcci seguenti.

1) Fare comandi per ogni chiamata di servizio e memorizzando il risultato in un oggetto condiviso (modello) e quindi visualizza questo modello nella vista. In questo approccio il problema è per alcuni servizi sono necessari in alcune altre pagine web, ma hanno bisogno del donot lo stesso modello. Come devo gestire questa situazione? Devo effettuare una chiamata remota asincrona e recuperare il risultato e poi ancora spedire e evento con l'oggetto evento memorizzando il risultato.

2) Effettuare una chiamata di servizio, attesa per il risultato poi effettuare un'altra chiamata e attendere il risultato e poi fare altre chiamate, non so se questo è il modo giusto?

Qual è la soluzione migliore per gestire uno scenario come questo. Grazie per il vostro aiuto.

È stato utile?

Soluzione

Quindi, credo che sto ancora confuso su ciò che il tuo problema, quindi mi limiterò a cercare di rispondere dicendo l'approccio avrei preso se avessi tre chiamate estranei a fare per un back-end.

Vorrei li sparare subito dopo l'uno con l'altro. Dal momento che le chiamate di back-end in Flex sono sempre asincroni, torneranno immediatamente. Ognuna di queste chiamate includerà una funzione di callback per quando il risultato viene restituito. Così, in pseudo codice (ish), sarebbe qualcosa di simile:

makeRequest1(whenRequest1Finishes);
makeRequest2(whenRequest2Finishes);
makeRequest3(whenRequest3Finishes);

In questo caso makeRequest* è un metodo che sa che cosa il server / meccanismo è per effettuare la chiamata e richiamerà per una funzione è stato definito un posto chiamato whenRequest*Finishes.

Supponendo, ora che ci sono tre diverse parti per l'interfaccia utente di essere aggiornati separatamente ognuna di queste richieste, vorrei popolano quelle zone del UI come vengono in. Non vorrei semplicemente popolare, anche se ... vorrei dare all'utente un'indicazione che sono arrivati. Questo può essere un'animazione sottili dei dati "volante" o un indicatore di un'attesa che scompare quando gli spettacoli di trasferimento dati fino. Invece di tre indicatori di attesa separate, si potrebbe fare un indicatore di attesa che filles l'intera interfaccia utente che non va via fino a quando tutti e tre vengono ricevuti.

In ogni caso, non avrei mai fare le chiamate in modo seriale a meno che le chiamate erano dipendenti l'una dall'altra. Utilizzare il built-in asincronicità in Flex a vostro vantaggio e fare tutte e tre le chiamate in parallelo.

E 'questo quello che stai cercando per ???

Altri suggerimenti

Si potrebbe avere un singolo oggetto che contiene i tre risultati degli inviti e fare ogni gestore di risposta messo la loro risposta in oggetto e verificare che non siano l'ultima chiamata di essere arrivato.

Esempio:

class ManyResult
var firstResult: *
var secondResult: *
var thirdResult: *

funzione di ottenere un completo (): booleano {return firstResult && && secondResult thirdResult; }

In ogni gestore che si avrebbe questa logica generico:
parse risultato
mettere risultato parsed in oggetto ManyResult

se ManyResult.complete:
method_which_glues_all_three_results_together ()

non mi consiglia di utilizzare questa soluzione se questo problema è frequente in quanto disordinato ottiene facilmente. Vorrei consigliare fare voi stessi un po 'di codice generico che fa questo per voi in modo pulito, standard.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top