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