如何使$ http.get返回响应而不是promise对象?

时间:2016-05-18 09:01:19

标签: javascript angularjs http asynchronous get

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对象 如何返回实际数据?

3 个答案:

答案 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);

以下是执行顺序:

  1. var final
  2. $http.get('http://localhost:9000/therapist_data',config) .success();:这将触发请求并在服务器响应您的请求时作为回调成功注册该功能
  3. console.log(final); - >所以仍然未定义。它没有等待响应。
  4. 有些时候......你的成功函数被称为。
  5. 这是回调和异步处理的基础,你不知道什么时候会被执行,或者至少它会经常在所有其他代码之后执行。在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,只会产生一个承诺链,在这种情况下你不需要。