AngularJS - échec resilence sur q$.tous les()

Je vais essayer de combler certaines des données locales de la résolution d'une série d'appels à distance.

Lors de chaque promesse est résolu, je charge les données et de procéder.

La méthode $q.all( [] ) fait exactement ceci:

        $q.all([
            this.getUserInfo(11)
                .then(function (r) {
                    results.push(r)
                }),

            this.getUserConns()
                .then(function (r) {
                    results.push(r)
                }),

            this.getUserCtxs()
                .then(function (r) {
                    results.push(r)
                })
        ])
        .then(function () {
            console.log(results)
        })


Le problème est que ce code n'est pas résilient.

Si l'un de ces échec de l'appel, personne ne peut le poisson!

Envelopper les appels dans une instruction try/catch, il suffit de causes $q.all() d'ignorer totalement l'entrée, même lorsqu'il n'est pas à l'échec (note de la console.journal de la touche func)...

        $q.all([
            this.getUserInfo2(11)
                .then(function (r) {
                    results.push(r)
                }),

            function () {
                try {
                    this.getUserGroups()
                        .then(function (r) {
                            console.log(r)
                            results.push(r)
                        })
                }
                catch (err) {
                    console.log(err)
                }
            },
        ])
        .then(function () {
            console.log(results)
        })

De sortie:

[Objet]


Aucune indication sur la façon dont je pourrais conclure à être résilient?


Grâce à @dtabuenc, j'ai franchi une étape supplémentaire.
La mise en œuvre de l'erreur de rappel, je ne peux éviter la rupture de la chaîne, puis appuyez sur les valeurs de l'résolu promesses.

Cependant, un méchant Exception est toujours affiché sur la console...
Comment puis-je me débarrasser de cela, si je ne peux pas try/catch sur demandes asynchrones?

Appelant code

    return $q.all([

            this.getUserInfo(user_id)
                .then(function (r) {
                    results['personal_details'] = r
                }),

            this.getUserConns()
                .then(
                    function (r) {
                    results['connections'] = r
                    },
                    function(err) {
                        console.log(err)
                    })

        ])
        .then(function () {
            return (results)
        })

Appelé code (injecter avec une exception)

    getUserConns: function() {

        return __doCall( ws.getUserConnections, {} )
            .then( function(r) {

                //very generic exception injected
                throw new Error

                if (r && r.data['return_code'] === 0) {
                    return r.data['entries']
                }
                else {
                    console.log('unable to retrieve the activity - err: '+r.data['return_code'])
                    return null
                }
            })
    },
InformationsquelleAutor domokun | 2013-12-13