gpt4 book ai didi

javascript - defer.promise 对于 angularJS 中具有不同数据输入的同时调用返回相同的结果

转载 作者:行者123 更新时间:2023-12-03 06:27:16 24 4
gpt4 key购买 nike

我有一个工厂,它对我的​​ salesforce apex 类进行 JavaScript 远程处理并返回 promise 。我同时多次调用工厂方法,每次调用都会返回 defer.promise 。但不知何故,它总是每次都会返回第一次调用的结果。即使我在 defer.resolve(response) 期间来自服务器的响应在工厂方法内部有所不同,但当返回 defer.promise 时,它​​每次都会返回相同的结果到 Controller 。我尝试调试但没有发现任何成功。谁能建议我做错了什么。

这是我的工厂方法:

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;

}]);

我将 Controller 名称保留为 fieldSetJsController{!cid} ,其中 {!cid} 是唯一的,并由任何尝试使用它的组件传递。这是为了使 Controller 范围适用于各个调用,而不是每次都覆盖相同的内容其他组件传递了一些数据。

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} 值调用相同的 Controller 来区分它们。

<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>

最佳答案

问题出在这里:

var defer = $q.defer();

您在 Factory 的构造函数中生成延迟对象(而不是每次调用该函数时都创建一个新对象),因此您的应用程序会一遍又一遍地解析相同的 Promise 对象。

var defer = $q.defer() 移至工厂方法内部,它应该可以正常工作。

关于javascript - defer.promise 对于 angularJS 中具有不同数据输入的同时调用返回相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38597335/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com