• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[GELÖST] AngularJS - Wert aus Service in den $scope des ViewController

// wohin geht dieses return eigentlich ?
Das geht im Prinzip an das nächste then-Callback in der Chain - sofern eines vorhanden ist. Falls nicht passiert damit überhaupt nix - es landet im Nirvana. Man sollte das return aber immer beibehalten, weil diese Verkettungen manchmal von unterschiedlichen Stellen aufgebaut werden. Beispiel bei $http: AngularJS prepare $http-results.

Uff...hab jetzt endlich meinen Code in Fiddle endlich soweit gebracht, dass das letzte fehlende Stück evtl auch bald gefunden wird. Habe versucht das alles in Kommentaren unterzubringen, falls jemand sich die Mühe machen möchte :)
Du machst schon Fortschritte. Sehr gut. Hier noch eine Optimierung für deine Chain:
PHP:
api.users.loadJSON()
  .then(function(users){
    // do something with users
    console.log('loadJSON() done');
    return users;
  })
  .then(function(users){
    return api.users.loadIMG(users);
  })
  .then(function(images){
    // do something with images
    console.log('loadIMG() done');
    return images;
  })
  .catch(function(err){
    // oops, something happend
    console.log(err);
    throw err;
  })
  .finally(function(){
    // will be executed always. perfect for stoppin
    // loading indicators and clean up stuff
  });

Versuche es zu vermeiden innerhalb einer then-Callback eine neue Chain aufzubauen. Halte die Aufrufe (wie in meinem Beispiel oben) immer schön flach. Außer du hast triftige Gründe dafür es anders zu machen.
 
Hey, danke für die Mühe!

Versuche es zu vermeiden innerhalb einer then-Callback eine neue Chain aufzubauen. Halte die Aufrufe (wie in meinem Beispiel oben) immer schön flach. Außer du hast triftige Gründe dafür es anders zu machen.

Würde ich auch gerne machen. Mein triftiger Grund ist eigentlich nur weil ich momentan nicht anders weiß wie ich Bilder sonst "preloaden" kann ( geht bestimmt -> wenn mans weiß ).

Denn eigentlich stecke ich die geladenen Bilder abschließend in das zuvor geladene JSON Objekt. Nach loadIMG sieht das JSON-Objekt so aus:
Code:
    {
      id: 1,
      username: 'foo',
      img: ['bild1','bild2','bild3'] // geladene HTMLImageObjekte aus loadIMG()
    }
Die Bilder werden dann anschließend mit users[0].img[1] in einem Canvas Element weiterverarbeitet.

Wenn ich loadIMG weglasse und das JSON dafür so aussehen lasse:
Code:
    {
      id: 1,
      username: 'foo',
      img: ['mein-pfad-zum-bild1','mein-pfad-zum-bild2','mein-pfad-zum-bild3']
    }

Wird das Bild erst beim Aufruf von users[0].img[1] geladen -> das funktioniert nicht, weil das Bild in einem CANVAS-Element gerendert wird und dazu geladen sein muss.
 
Zuletzt bearbeitet:
Jo. Habe jetzt auch das Laden der Bilder in einen separaten ImageLoader Service gepackt und den Aufruf ein wenig angepasst - danke! :) Hier ist der aktuelle Fiddle
Doch ich finde immer noch keine Lösung wie ichs hinbekomme das Laden der Bilder ( mit PreloadJS ) in ein $q-ding zu legen, das erst aufgelöst wird wenn der der Ladevorgang der Bilder mit handleComplete() abgeschlossen ist. **

In der Konsole wird 'chain done' aufgerufen bevor 'Bilder fertig geladen' ..dreh mich im Kreis...wäääääääääääääää. Gibt es hier nicht irgendein Preload-Modul das genau so etwas erledigt - damit ich preloadJS nimmer brauche ?

P.S: Habe da schon Beispiele gefunden - das von Ben Nadel ist das interesssanteste doch das wird aus dem Controller aus aufgerufen und sieht mir ein wenig koomplieziert aus es auf mein Ding umzuschreiben.

- - - Aktualisiert - - -

I werd narrisch...es läuft!!!!!! :victorious:

**war eigentlich ganz einfach - aber der Weg dahin pppffüüüü
 
Zuletzt bearbeitet:
Doch ich finde immer noch keine Lösung wie ichs hinbekomme das Laden der Bilder ( mit PreloadJS ) in ein $q-ding zu legen, das erst aufgelöst wird wenn der der Ladevorgang der Bilder mit handleComplete() abgeschlossen ist. **
Im Prinzip musst du asynchrone Opertionen einfach in einen $q-Block wrappen und durch den Aufruf von resolve signalisieren, dass die Operation erfolgreich durchgeführt (oder mit reject fehlgeschlagen) ist:
PHP:
var promise = $q(function(resolve, reject){
  //..

  function handleError(){
    reject('error..');
  }

  function handleComplete(){
    resolve(value);
  }

  // ..
});
 
Zurück
Oben