var final;
final = $http.get('http://localhost:9000/therapist_data',config)
.success(function(response) {
console.log("I got the data I requested");
var resdata = response;
console.log(resdata);
return resdata;
});
console.log(final);
我正在尝试返回响应数据并将其存储到最终变量中,而我正在获取promise对象 如何返回实际数据?
答案 0 :(得分:3)
我会根据你的代码尝试开发Cyril答案:
var final;
final = $http.get('http://localhost:9000/therapist_data',config)
.success(function(response) {
console.log("I got the data I requested");
var resdata = response;
console.log(resdata);
return resdata;
});
console.log(final);
以下是执行顺序:
var final
$http.get('http://localhost:9000/therapist_data',config)
.success();
:这将触发请求并在服务器响应您的请求时作为回调成功注册该功能console.log(final);
- >所以仍然未定义。它没有等待响应。这是回调和异步处理的基础,你不知道什么时候会被执行,或者至少它会经常在所有其他代码之后执行。在angularJS中,无法进行同步请求。您必须在成功函数中移动代码。
答案 1 :(得分:2)
只要您正在进行网络呼叫,您的数据就会异步返回,这是它的本质,您无法对抗它。
var wrongFinal; // <-- nope, final will never get into that scope
$http.get('http://localhost:9000/therapist_data',config)
.success(function(response) {
console.log("I got the data I requested");
var goodFinal = reponse; // <-- yes, here, the data lived
// do something with the data here
});
console.log(wrongFinal); // nop, wrong scope, no sense, data doesn't live here
Soooooo,答案是一个问题:
您想对数据做什么?
取决于目的地。你打算打电话给他们吗?要更新视图吗?你想打电话给第三方图书馆吗?
您需要理解并接受JavaScript中异步的本质。
答案 2 :(得分:0)
$ http.get将始终返回一个承诺
如果您想获得承诺价值,您应该在success
回调中执行此操作,如下所示:
var final;
$http.get('someUrl').success(function(response) {
final = response;
});
不需要resData,只会产生一个承诺链,在这种情况下你不需要。