Ho letto $ q e prometto da giorni e mi sembra di capirlo ... un po '. Ho la seguente situazione nella pratica:
- Una richiesta $ http viene effettuata e controlla se è possibile effettuare una chiamata successiva.
Se la prima chiamata fallisce, restituire "nessun dato", se ha esito positivo e dice che è possibile effettuare una chiamata, viene effettuata la seconda chiamata, in caso contrario - "nessun dato" di nuovo. Se la seconda chiamata ha esito positivo, restituisce i dati, in caso contrario - "nessun dato". Ecco come si presenta (circa, ho semplificato per idea generale, in modo da non preoccuparsi dei piccoli errori qui):
return $http.get (something) .then(function(allowedAccess){ if(allowedAccess){ return $http.get (somethingElse) .then(function(result){return {data:result} }, function(error){return {data:"n0pe"} } ) } else { return {data:"n0pe"} } }, function(){ return {data:"n0pe"} });
mi è stato detto di usare $ q qui. Non capisco davvero come o perché lo farei. Le chiamate $ http sono già promesse.
Se c'è un modo per rendere questo pulitore, non lo vedo. Ho appena finito di rileggere questo post on the subject. In sostanza, mi sto perdendo qualcosa/c'è un modo migliore per farlo?
Modifica: anche solo rileggere a tutorial on chaining promises - non gestisce affatto gli errori di chiamata. Fondamentalmente postando questo come due diligence.
Edit 2: Questo è più di un elaborato sulla teoria che sto chiedendo circa, estratto dal primo articolo:
Questo è un semplice esempio però. Diventa davvero potente se il tuo callback() restituisce un'altra promessa. In tal caso, il successivo() verrà eseguito solo una volta che la promessa si risolverà. Questo modello può essere utilizzato per le richieste HTTP seriali, per esempio (in cui una richiesta dipende dal risultato di una precedente):
Questo sembra parlare di catene come questo:
asyncFn1(1)
.then(function(data){return asyncFn2(data)})
.then(function(data){return asyncFn3(data)})
Così , se capisco correttamente questo a). Non si applica a me perché non ho una terza funzione. b). Mi applicherebbe se avessi tre funzioni perché mentre eseguo un'istruzione if all'interno della prima richiesta $ http, e solo all'interno dell'istruzione if restituisco un'altra promessa. Quindi, in teoria, se avessi tre funzioni asincrone per la catena, avrei dovuto inserire la mia affermazione if in una promessa?
http://stackoverflow.com/a/37175801/2518285 –