AngularJS - fail resilence auf $q.alle()

Ich versuche zu füllen, einige lokale Daten die Lösung einer Reihe von remote-Aufrufe.

Wenn jede Verheißung ist gelöst, ich habe die Daten laden und fahren.

Die Methode $q.all( [] ) tut genau dies:

        $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)
        })


Problem ist, dieser code ist nicht belastbar.

Wenn einer dieser Aufruf fehlschlägt, bekommt niemand die Fische!

Verpackung die Aufrufe in einen try/catch-Anweisung, die einfach bewirkt, dass $q.all() völlig ignoriert, der Eintrag, auch wenn er nicht ausfällt (Anmerkung der Konsole.log dich in der 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)
        })

Ausgabe:

[Objekt]


Jeder Hinweis darauf, wie ich mich wickeln konnte diese ausdauernd zu sein?


Dank @dtabuenc, ich habe einen Schritt weiter gegangen.
Die Implementierung der Fehler-callback kann ich vermeiden, das brechen der Kette, und push die Werte, die gelöst verspricht.

Jedoch eine böse Ausnahme ist immer noch auf der Konsole angezeigt...
Wie kann ich loswerden, dass wenn ich nicht try/catch-auf asynchrone Anfragen?

Anrufer-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)
        })

Aufgerufenen code (Spritzen mit einer Ausnahme)

    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
Schreibe einen Kommentar