等到http.get将返回对象

时间:2016-08-05 07:59:05

标签: javascript function http get

我如何等待,直到http.get将返回对象?

getData: function(){
    let obj = false;
    http.get("http://...")
      .accept("application/json")
      .end(function(err,res){
        if(err==null && res.ok){
          let js = JSON.stringify(res.body);
          obj = JSON.parse(js);
        }
      })
      return obj;
  },

这个函数我正在调用var obj = getData;但我仍然是假的,当我打印值时,首先返回false,然后分配对象,那么如何等到对象被分配然后返回对象? ?

2 个答案:

答案 0 :(得分:1)

最简单的方法是使用回退功能。您可以使用承诺,但这需要额外的:

更改函数以接受回调函数,然后在get调用返回时调用该函数:

getData: function(cb){
  let obj = false;
  http.get("http://...")
    .accept("application/json")
    .end(function(err,res){
      if(err==null && res.ok){
        let js = JSON.stringify(res.body);
        obj = JSON.parse(js);

        if (cb)
          cb(obj);
      }
    });
},

然后用:

来调用它
getData(function(obj){  
    // do something here with the returned object.
});

http.get所使用的异步编程使用回调形式的事件 - 和承诺。所以等待http.get返回哪个是事件,然后一旦它返回就继续。

答案 1 :(得分:0)

如果你的http.get调用返回一个promise obj那么你可以做这样的事情 将获取数据的方法更改为

**HTML**

<div ng-controller="homeCtrl">
    <my-dir name="{{namee}}" age="{{age}}"></my-dir>
</div>

**JS**

var app = angular.module("home")
app.controller("homeCtrl",["$scope",function($scope){
   $scope.namee = "John";
   $scope.age= 30;
}]);

app.directive("myDir",function(){
    return{
        restrict :'E',
        scope: {
            name : '@',
            age :  '=',
        },
        template: ['Directive name is: {{name}}',
                   '<p>{{age}}</p>' 
                 ]
        }
})


**Output**

John 30 
Directive name is: {{name}} {{age}}

和它的呼叫

getData: function(){
        let obj = false;
        return http.get("http://...")
          .accept("application/json");
      },