gpt4 book ai didi

javascript - angularjs中的异步调用

转载 作者:行者123 更新时间:2023-11-30 07:58:58 26 4
gpt4 key购买 nike

我有几个关于 Angular 异步函数的问题。我希望我的服务函数能够返回我通过使用 $http 获得的数据并在另一个函数中使用该数据。让我用当前的代码来演示:

dashboard.servicesModule.service('SubscriptionService', function ($http, $q) {

this.getImportantData= function (param1, param2) {

var url = "my/url/with/parameters?param1=param1&param2=param2";

$http.get(url).then(function(response){
console.log("response");
console.log(response.data); // < --- this actually shows the data i need!!
return response.data.vsyData; <--- however, this returns undefined
}, function(error){
// some error thingy just in case
});

};

this.getSomeFunctionality = function(param1, param2, param3){
var importantdata= this.getImportantData(param1, param2);

// do some filtering on the data with the purpose of returning only what i need

console.log(importantdata); <--- undefined

};

this.getEvenMoreFunctionality = function(param1, param2, param3){
var importantdata= this.getImportantData(param1, param2);

// reusing getImportantData again!

console.log(importantdata); <--- undefined

};
});

所以我一直在尝试各种各样的事情(比如 thisthis )和我自己的一些发明。但它开始似乎没有办法在它自己的回调中使用来自 $http.get 的数据。而且因为我需要我的 Controller 中的最终结果,所以似乎没有其他方法可以在我的 Controller 中执行 $http.get(url).success(...some logic here) 并执行那里的过滤和其他操作。

但是,我读了here我引用:

Our controller should be almost completely agnostic as to how data is retrieved and sent, and should only be concerned with the general action of sending and retrieving data to and from the service.

我对此的解释如下:我的 Controller 应该向服务询问我需要的数据,而服务应该确保它以正确的形式提供数据。

最重要的问题是:我怎样才能让上面的代码做它需要做的事情,或者那是不可能的?

我应该在我的 Controller 中执行我的业务逻辑吗?因为here, in the angular docs我基本上读到你应该在你的 Controller 中执行业务逻辑,而不是过滤...

这可能很明显,但是......我是一个棱 Angular 分明的新手:-)。谢谢!

最佳答案

试试这个:

this.getImportantData= function (param1, param2) {
var url = "my/url/with/parameters?param1=param1&param2=param2";

return $http.get(url);
};

this.getSomeFunctionality = function(param1, param2, param3){
this.getImportantData(param1, param2)
.then(function(response){
console.log(response.data.vsyData);
}, function(error){
// some error thingy just in case
});
};

this.getEvenMoreFunctionality = function(param1, param2, param3){
this.getImportantData(param1, param2)
.then(function(response){
console.log(response.data.vsyData);
}, function(error){
// some error thingy just in case
});
};

您无法从具有异步调用的方法中获取数据。您可以返回 promise,然后您可以从 promise 中获取数据。

关于javascript - angularjs中的异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32889369/

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