如何将http get响应数据值提供给外部作用域

时间:2017-12-04 11:22:10

标签: javascript angularjs

.config([
    '$provide',
    function ($provide) {
        'use strict';



        var initInjector = angular.injector(['ng']);

        var apiUrl;

        initInjector.get('$http').get('customer/api/')

       .then(function (response) {
            console.log("dddd" + response.data.url);

            apiUrl = response.data.url;

          });

       console.log(apiUrl);

//此打印为未定义

        $provide.constant('GLOBAL', global);
    }
]);

当我打印出来自http get service print的apiUrl值为undefined。

有人可以让我将response.data.url的值提供给外部范围。

编辑:

    var apiUrl;

    var initInjector = angular.injector(['ng']);

    var self = this;

    initInjector.get('$http').get('customer/api/')

    .then(function(response) {

        console.log("ddddd" + response.data.url); //print value
        self.apiUrl = response.data.url;

        console.log("selff" +self.apiUrl); //print value
    });

    console.log("outerr" +self.apiUrl); // print undefined

2 个答案:

答案 0 :(得分:0)

Promise不能像同步代码一样使用,因为它们会立即返回一个承诺。在设置全局值之前,您应该等待承诺完成。

而不是做

a = {}
a.key1 = Promise().then(()=>{
  return 1
})
a.key2 = Promise().then(()=>{
  return 2
})

执行类似的操作(使用bluebird):

Promise.all([
    Promise().then(()=>{
      return 1
    }),
    Promise().then(()=>{
      return 2        
    }),
]).then(result => {
  a.key1 = result[0]
  a.key2 = result[1]
})

或者你可以查看es7提供的async / await语法

答案 1 :(得分:0)

声明一个全局变量,然后在http调用之后赋值。

var apiUrl ='';
.config([
    '$provide',
    function ($provide) {
        'use strict';
        var initInjector = angular.injector(['ng']);

        var apiUrl;

        initInjector.get('$http').get('customer/api/').then(function (response) {
            console.log("dddd" + response.data.url);

            this.apiUrl = response.data.url;

          });

       console.log(this.apiUrl);