gpt4 book ai didi

javascript - 在另一个 AngularJS 之后执行函数

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

我需要在提供 sessionId 的一种登录功能之后执行一个获取数据的功能。此 sessionId 是第二个功能所必需的。

app.controller('TestController', 
function ($scope, dbObjectsDAO, loginService){

var sessionID = loginService.getSessionID(); //Login function

var self = this;

this.items = [];

this.constructor = function() {
dbObjectsDAO.getAll(sessionID).then(function(arrObjItems){
$scope.items = arrObjItems;
});
};

this.constructor(); //get the data

return this;

});

我尝试了几种变体,例如:

loginService.getSessionID().then(function(sessionID){
this.constructor(); //also with just constructor();
});

但我总是收到错误(在上面的例子中:Illegal constructor)。
那么我怎样才能设法一个接一个地执行一个函数呢?也许回调结构在这里会有所帮助,但我不知道如何实现它。


编辑
这是登录代码:

app.service('loginService', function($http, $q) {


this.getSessionID = function()
{
return $http({
method: "GET",
url: "http://localhost:8080/someRequestDoneHere"
}).then(function(response)
{
return response.data.sessionId; // for example rYBmh53xbVIo0yE1qdtAwg
});
};

return this;

});

最佳答案

您的 getSessionID() 函数是否返回 promise ?如果是这样,您需要这样的代码:

app.controller('TestController', 
function ($scope, dbObjectsDAO, loginService){

var sessionID;
var vm = this;
vm.items = [];

loginService.getSessionID()
.then(function(sid) {
sessionID = sid;
return dbObjectsDAO.getAll(sessionID);
})
.then(function(arrObjItems){
vm.items = arrObjItems;
});
});

因此您的登录服务返回一个解析为 session ID 的 promise 。您可以将其保存在变量中以供在其他地方使用,也可以使用它来触发获取项目。

我还将您的 self 更改为 vm 因为该命名是 Angular 约定,并将项目存储在 vm.items 中而不是直接存储在范围内。

编辑:您的登录代码已经返回一个 promise ,而不是 session ID。 then 中的 return 只是返回一个新的 promise ,该 promise 解析为您返回的值。

有几种方法可以链接多个 $http 请求。如果它们彼此独立,只需发出一堆请求并在它们全部完成时使用 $q.all 进行处理。

var promise1 = $http(something)
.then(function(response) { vm.data1 = response.data; return vm.data1; });
var promise2 = $http(something)
.then(function(response) { vm.data2 = response.data; return vm.data2; });

$q.all([promise1, promise2], function(values) {
// here can safely use vm.data1 or values[0] as equivalent
// and vm.data2 or values[1].
});

如果一个请求依赖于另一个请求的结果,您甚至可以这样做:

var promise1 = $http(something)
.then(function(response) {
vm.data1 = response.data;
return { method:'GET', url: response.data.link}
});
var promise2 = promise1.then($http)
.then(function(response) { vm.data2 = response.data; return vm.data2; });

您的模板需要使用“controller as something”语法声明 Controller :

<div ng-controller="TestController as test" ng-bind="test.items"></div>

关于javascript - 在另一个 AngularJS 之后执行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35341867/

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