defer.promise возвращает одинаковый результат для одновременных вызовов с разными входами данных в angularJS

0

У меня есть фабрика, которая переводит JavaScript в мой класс apex salesforce и возвращает обещания. Я звоню по заводскому методу несколько раз одновременно, что вернет мне defer.promise для каждого звонка. Но почему-то он всегда возвращает мне результат первого звонка каждый раз. Несмотря на то, что мой ответ с сервера отличается от заводского метода во время defer.resolve(response), при возврате defer.promise его возвращающий один и тот же результат каждый раз на контроллер. Я попробовал отладку, но не смог найти никакого успеха. может ли кто-нибудь предположить, что я делаю неправильно.

Вот мой заводский метод:

app.factory('FieldSetFactory', ['$q', '$log', function($q, $log) {

var fieldSet = {};
var defer = $q.defer();

fieldSet.getFields = function(scope,fieldSetName, objectName) { 
    this.scope = scope;
    var self = this;

    FieldSetController.getFieldSetInfo(fieldSetName,objectName,function(response, event) {
        if(event.status) {
            console.log('response =',response);  //this prints the actual result returned from server for different calls with different parameters
            defer.resolve(response);     
        } 
        else {
            $log.error(event.message);
            defer.reject(event.message);
        } 

    }); 

    return defer.promise;
}

return fieldSet;

}]);

Я сохранил имя своего contoller как fieldSetJsController {! Cid}, где {! Cid} уникален и передан любым компонентом, который пытается его использовать. Это делается для того, чтобы сделать область управления отдельными вызовами, а не переписывать их каждый раз, а другой переданный компонент некоторые данные.

app.controller('fieldSetJsController{!cid}', ['$scope', 'dataService',     
'requestNotificationChannel','FieldSetFactory', function($scope, 

 dataService,  
 requestNotificationChannel,FieldSetFactory) {


 FieldSetFactory.getFields($scope,$scope.fieldSetName,$scope.objectAPIName).then(function(response){
        console.log("response in controller..............",response);  //this response always shows reslut of first call and any subsequent calls return same defer.promise
        $scope.fieldsetList = JSON.parse(response.replace(/&/g,'').replace(/quot;/g,'"'));
        console.log("FiledSets..............",$scope.fieldsetList);  //this is always printing same result for different calls with different parameter
    });

 }]);

Это мои компоненты, которые вызывают один и тот же контроллер с различным значением {! Cid}, чтобы отличить их.

<c:FieldSetComponent objectAPIName="Applications__c" 
 fieldSet="Application_FieldSet_One" cid="Applications_FieldSet_One" 
                 sectionTitle="Section 1" columns="2" textAlign="center">
 </c:FieldSetComponent>

 <c:FieldSetComponent objectAPIName="Applications__c" 
 fieldSet="Application_FieldSet_Second" cid="Applications_FieldSet_Second" 
                 sectionTitle="Section 2" columns="2" textAlign="center">
 </c:FieldSetComponent>
<c:FieldSetComponent objectAPIName="clcommon__Collateral__c"   
fieldSet="Collateral_FieldSet_One" cid="Collateral_FieldSet_One" 
                 sectionTitle="Section 3" columns="2" textAlign="center">
</c:FieldSetComponent>
Теги:
angular-promise

1 ответ

1
Лучший ответ

Проблема здесь:

var defer = $q.defer();

Вы генерируете свой отложенный объект в конструкторе Factory (вместо создания нового при каждом вызове функции), поэтому ваше приложение снова и снова разрешает один и тот же объект-обещание.

Переместите var defer = $q.defer() внутри фабричного метода, и он должен работать правильно.

  • 0
    Я провел часы и сходил с ума от этого. Спасибо за тонну. Не могу принять ответ в течение 1 минуты :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню