gpt4 book ai didi

javascript - 将一个服务(工厂)注入(inject)另一个服务(工厂),两者都是异步的

转载 作者:行者123 更新时间:2023-12-03 11:43:21 26 4
gpt4 key购买 nike

我应该执行以下操作:

  • 可能通过服务/工厂,使用 $q(异步)查询 API 以获取大型名称数据集
  • 有另一个服务(也是异步的),它应该只返回上述工厂的元素,如果它们与某个字符串(搜索字段)匹配。目的是缩小值的范围,使值的数量相当少,以便我的选择框可以处理它。

    • 我的 Controller 应该调用第二个服务,获取这些值并分配给 $scope 属性,以供选择框(指令)进一步使用。

我认为我应该在 Controller 中仅注入(inject)第二个(缩小值)服务/工厂。第一个工厂(大型数据集)应作为第二个服务的依赖项注入(inject),在第二个服务中将进行比较,从而创建缩小的结果集。

但是,当我向工厂注入(inject)大型数据集时,我不确定应该如何将其数据分配给变量/对象,以便我可以在第二个工厂中进一步使用它。如果我 console.log 它,它会显示为 promise

Object {then: function, catch: function, finally: function}

而不是返回数据集。

第一个提到的工厂:

    .factory('MedicationDisplayNamesFactory', function MedicationDisplayNamesFactory($http, $q){

return {
getDisplayNames: function(){
return $http({
method: 'GET',
url: 'http://rxnav.nlm.nih.gov/REST/spellingsuggestions?name=ambien',
headers: {
'Content-type': 'application/json'
}
});
}

};

return MedicationDisplayNamesFactory;

})

第二个:

    .factory('MedicationMatchingNamesFactory', 
['$http', '$q', '$timeout', 'MedicationDisplayNamesFactory',
function MedicationMatchingNamesFactory($http, $q, $timeout, MedicationDisplayNamesFactory){

return {
getMatchingNames: function(){
var foo = MedicationDisplayNamesFactory.getDisplayNames().then(
function(response){
var bar = response.data.suggestionGroup.suggestionList.suggestion;
}
);

console.log(foo);

return foo;

}
};


return MedicationMatchingNamesFactory;

}])

在 Controller 中,我应该能够调用:

$scope.myData = MedicationMatchingNamesFactory.getMatchingNames();

类似这样的事情。

最佳答案

我已经为 HTTP 响应创建了一个回调函数,并将其作为参数传递给 getMatchingNames:

<!doctype html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular.js"></script>
</head>
<body ng-app="plunker">
<div ng-controller="MainCtrl">
<ul>
<li ng-repeat="name in myData">
{{name}}
</li>
</ul>
</div>
<script>
var app = angular.module('plunker', []);
app.controller('MainCtrl', ['$scope', 'MedicationMatchingNamesFactory', function($scope, MedicationMatchingNamesFactory) {
var setMyData = function(myData) {
$scope.myData = myData;
}

MedicationMatchingNamesFactory.getMatchingNames(setMyData);
}]).factory('MedicationDisplayNamesFactory', function MedicationDisplayNamesFactory($http, $q){

return {
getDisplayNames: function(){
return $http({
method: 'GET',
url: 'http://rxnav.nlm.nih.gov/REST/spellingsuggestions?name=ambien',
headers: {
'Content-type': 'application/json'
}
});
}

};

return MedicationDisplayNamesFactory;

}).factory('MedicationMatchingNamesFactory',
['$http', '$q', '$timeout', 'MedicationDisplayNamesFactory',
function MedicationMatchingNamesFactory($http, $q, $timeout, MedicationDisplayNamesFactory){
return {
getMatchingNames: function(callback){
MedicationDisplayNamesFactory.getDisplayNames().then(function(response){
var data = response.data.suggestionGroup.suggestionList.suggestion;
callback(data);
});
}
};
}]);
</script>
</body>
</html>

关于javascript - 将一个服务(工厂)注入(inject)另一个服务(工厂),两者都是异步的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26165761/

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