【发布时间】:2018-01-05 16:46:18
【问题描述】:
环境 AngularJS 4
我尝试在函数中运行 HTTP 请求,但无法将结果发回。
下面已经用一些 cmets 发布了我的代码。
我只需要true 或false 值,但我什么也没收到。
我在这个问题上苦苦挣扎了一段时间,但没有找到解释和解决方案。有人可以给我提示吗?
public runLoginProcess(username:String, password:String):boolean{
let body= { "username":username,"password":password };
let head = new Headers();
head.append("Content-Type", "application/json");
head.append("Accept", "application/json");
// RUN THE HTTP CALL AN IF IT WORKS, SEND TRUE AND ERROR IN CASE OF AN ERROR BACK
this.http.post("<PATH TO MY SERVICE>", body)
.subscribe(response => {
let token = response.json() && response.json().token;
if (token) {
localStorage.setItem('currentUser', JSON.stringify({"username": username, "token": token}))
return true;
}
},
error2 => {
return false;
}
);
}
【问题讨论】:
-
Node.js promises, async, or just callbacks 的可能重复项。您必须使用某种异步构造:回调、pomises 或现在等待。
-
您是否希望 runLoginProcess 返回真/假结果?我怀疑您期望固有异步函数的同步行为。尝试使用您的调试器,或者尝试在您调用 http.post 之后立即放置一个 console.log,并在您的 return true/return false 语句之前放置一个 console.log 调用。如果你能控制它,也许会延迟你的 HTTP 服务。然后观察执行顺序。
-
这是 Angular,而不是 AngularJS。没有 AngularJS 4 这样的东西。