2016-04-08 14 views
0

Fabrikadan getBookID'leri çağırıyorum ve sonucu aynı fabrikadan getBookInfo olarak adlandırıyorum. ama Console.log (bookInfo) içinde bana önceki aramanın sonucunu gösterir! Döndürmeden önce deferred.promise değerini nasıl güncelleyebilirim ??update q geri dönmeden önce söz vermeden önce

bu benim denetleyicisi

angular.module('myApp.products',[]) 
    .controller('productController', function ($scope , MainFactory , $location) { 
     function getBookInfo(bookIDs){ 
      MainFactory.getBookList(bookIDs) 
       .then(function (bookInfo) { 
        console.log(bookInfo) 
       }) 
     } 

     MainFactory.getBookIDs() 
      .then(function (result) { 
       $scope.bookIDList = result; 
       getBookInfo($scope.bookIDList); 
      }); 


    }); 

ve bu benim fabrika

app = angular.module('myApp'); 

app.factory("MainFactory", ['$soap', '$http', '$q', function ($soap, $http, $q) { 
    var viewFactory = {}; 
    var deferred = $q.defer(); 
    viewFactory.getBookIDs = function() { 
     //var bookIDs = []; 
     $http({ 
      url: 'http://127.0.0.1/client.php?fn=getBooks', 
      method: "GET" 
     }).then(function success(response) { 
      deferred.resolve(response.data.result); 
     }, function myError(error) { 
      console.log('error', error); 
     }); 
     return deferred.promise; 
    }; 

    viewFactory.getBookList = function (bookIDs) { 
     $http({ 
      url: 'http://127.0.0.1/client.php?fn=getBooksInfo&p1=' + bookIDs, 
      method: "GET" 
     }).then(function success(response) { 
      deferred.resolve(response.data.result); 
     }, function myError(error) { 
      deferred.reject(error); 
     }); 
     return deferred.promise; 
    }; 

    return viewFactory; 
}]); 
+0

Bu yöntemlerin her birinde yeni bir söz vermelisiniz. –

cevap

0

Servis yöntemlerin her biri için yeni bir umut dönmelidir:

app.factory("MainFactory", ['$soap', '$http', '$q', function ($soap, $http, $q) { 
    var viewFactory = {}; 
    viewFactory.getBookIDs = function() { 
     var deferred = $q.defer(); 
     //var bookIDs = []; 
     $http({ 
      url: 'http://127.0.0.1/client.php?fn=getBooks', 
      method: "GET" 
     }).then(function success(response) { 
      deferred.resolve(response.data.result); 
     }, function myError(error) { 
      console.log('error', error); 
     }); 
     return deferred.promise; 
    }; 

    viewFactory.getBookList = function (bookIDs) { 
     var deferred = $q.defer(); 
     $http({ 
      url: 'http://127.0.0.1/client.php?fn=getBooksInfo&p1=' + bookIDs, 
      method: "GET" 
     }).then(function success(response) { 
      deferred.resolve(response.data.result); 
     }, function myError(error) { 
      deferred.reject(error); 
     }); 
     return deferred.promise; 
    }; 

    return viewFactory; 
}]); 
yine ... Aynı kararlılık/reddetmek tetikleme katları görevleri gerçekleştirmek isteyen sürece

Sözler (yeniden kullanılamaz gerekirdi, bunun için bir söz toplama toplayıcısını açıkça uygulamalıdır).

0

Tüm açısal hizmetler singletons vardır, bu yüzden bu böcek getBookIDs ve getBookList payıdır var gerekçe gösterdiler tahmin aynı deferred

Fabrikanızı

olarak değiştirmeyi deneyin.
app.factory("MainFactory", ['$soap', '$http', '$q', function ($soap, $http, $q) { 
    var viewFactory = {}; 
    viewFactory.getBookIDs = function() { 
     //var bookIDs = []; 
     var deferred = $q.defer(); 
     $http({ 
      url: 'http://127.0.0.1/client.php?fn=getBooks', 
      method: "GET" 
     }).then(function success(response) { 
      deferred.resolve(response.data.result); 
     }, function myError(error) { 
      console.log('error', error); 
     }); 
     return deferred.promise; 
    }; 

    viewFactory.getBookList = function (bookIDs) { 
     var deferred = $q.defer(); 
     $http({ 
      url: 'http://127.0.0.1/client.php?fn=getBooksInfo&p1=' + bookIDs, 
      method: "GET" 
     }).then(function success(response) { 
      deferred.resolve(response.data.result); 
     }, function myError(error) { 
      deferred.reject(error); 
     }); 
     return deferred.promise; 
    }; 

    return viewFactory; 
}]); 
İlgili konular