2016-09-28 3 views
0

Ich bin ein wenig verwirrt durch Versprechungen und RückrufeAngular Versprechen um Rückruf

Mischen

Ich versuche, so etwas wie dies in einer Fabrik

startRecord: function (data) { 
    return $q(function(resolve, reject) { 
     myFunction(data,resolve,reject); 
    }) 
    } 

die

function myFunction(data,callback,error){ 
...do stuff 
    if(worked) 
     callback(response) 
    else 
     error(err) 

} 

ruft zu tun und dann rufen sie aus meinem Controller wie

factory.startRecord(data).then(function(data)...).catch(function(error)...); 

Aber die dann oder catch werden nie genannt ..

Bin ich den richtigen Weg darüber?

+0

Sieht auf den ersten Blick in Ordnung. Können Sie eine JSFiddle/Plunker-Demo erstellen? – Phil

+1

Scheint hier wie erwartet zu funktionieren ~ http://plnkr.co/edit/7lYGMJERPrySg6jj7gii?p=preview – Phil

+1

Es ist eher so .. http://plnkr.co/edit/7ofUIBoDgy2LY9YDdZqX?p=preview was auch funktioniert. Aber mein Code funktioniert nicht - muss etwas anderes sein .. – user5839

Antwort

0

Mein Problem war der Rückruf mit einer leeren Nachricht gefeuert wurde, bevor die vollständige Nachricht gesendet wurde. Ich musste einige zusätzliche Prüfungen hinzufügen, um den Rückruf zu stoppen, bis die Nachricht fertig war.

-1

Angular $ http nennen Sie es Selbstversprechen, Sie müssen es einfach perfekt nennen.

Beispielcode:

Factory:

angular.module(ApplicationName).factory('calendarFactory', ['$http', function ($http) { 
    calendarFactory.testCall = function (request_params) { 

     var req = { 
      method: 'POST/GET', 
      url: <URL>, 
      headers: { 
       'Content-Type': 'application/json' 
      }, 
      data: request_params 
     }; 

     return $http(req); 
    } 
} 

Controller:

function testCall(start, end) { 

    var request_paramas = { 
    start: start.toString(), 
    end: end.toString() 
    }; 

    calendarFactory.testCall(request_paramas).then(
     function(success){ 
      //Success method 
     },function(error){ 
      //Error method 
    }) 
} 

Hier habe ich einen Back-End-http Anruf von der Fabrik selbst

+1

Ich verwende nicht $ http. Ich benutze $ q. Es führt keine $ http-Anfrage aus. – user5839

+0

versuchen Sie mit http .. es wird einfacher –

+1

Danke. Die aufgerufene Funktion führt keine http-Anfrage aus, sie startet eine Kameraaufnahme über eine API, die TCP verwendet. Ich kann http nicht verwenden. – user5839