gpt4 book ai didi

javascript - 在 AngularJS 中异步调用 hprose.httpclient

转载 作者:行者123 更新时间:2023-11-30 05:31:56 25 4
gpt4 key购买 nike

我有一个处理用户身份验证的 Hprose 服务器。我正在尝试编写一个 logonService,它在用户登录后返回一个 UserInfo 对象。在下面的代码中,hprose.HttpClient.login() 被异步调用并且需要几秒钟,但是 Controller 中的代码在创建 logonService 实例后继续运行。因此 $scope.user 始终为空,并且永远不会调用 logonService.logon() 。我尝试使用 $http.get,但无法弄清楚如何使用 Hprose 而不是示例代码中的 Http 来获取 Promise obj。在谷歌中搜索没有找到任何有用的东西。任何人都知道该怎么做?谢谢。

var app = angular.module("myApp",[])
.service("logonService", function() {
var httpclient = new hprose.HttpClient("http://testurl.com:4800/webapi/", ["login"]);
httpclient.login("userid", "ppt", function(sid) {
console.log("sid1="+sid);
}
this.logon = function() {
console.log("here I am");
return something;
}
})
.controller("myCtrl", ["logonService", function(logonService) {
var user = logonService.logon();
$scope.user = user;
}
)

最佳答案

部分问题是 myCtrl 中的代码没有等待 logonService.logon() 的异步结果。此外,我们不知道 httpclient.login() 是否返回 promise 或什么。所以我们需要将它包装在 $q promise 中。

var app = angular.module("myApp",[])

app.service("logonService", function() {
var loginURL = "http://testurl.com:4800/webapi/";
var httpclient = new hprose.HttpClient(loginUrl, ["login"]);

// wrap login fn w/ new $q promise
this.logon = function(userid, ppt) {
return $q(function(resolve,reject){
httpclient.login(userid, ppt, function(sid) {
console.log("sid1="+sid);
// resolve or reject fn based on results passed to callback
if (sid) {
resolve(sid);
} else {
reject('sid wasn\'t defined!');
}
})
}
}

})

app.controller("myCtrl", ["logonService",
function(logonService) {
logonService.logon(userid, ppt).then(function(user){
// assign user to scope only after promise resolved
// 'user' arg will be whatever passed to 'resolve' above
$scope.user = user;
})
.catch(function(e){
console.log('An Error happened: ' + e)
// logon server was down, etc.
})
}
])

Here是 AngularJS 的 $q 很好的引用。这会让你知道如何在任何情况下创建 Promise。

希望对您有所帮助。

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

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