如何为http get方法返回的变量赋值?
我在构造函数中声明了变量this.artists = null
。我想将$ http.get返回的值分配给this.artists variable
。
Res.data
返回对象-可以,但是我无法将其分配给变量this.artists
export default class ArtistsService {
constructor($http) {
'ngInject';
this.$http = $http;
this.artists = null;
}
getArtists() {
return this.$http.get("https://api.spotify.com/v1/search?
q=Muse&type=track%2Cartist&market=US&limit=10&offset=5",
{headers: {
'Authorization': <Authorization>}, params
}).then(function mySuccess(res) {
this.artists = res.data;
console.log(this.artists);
}).catch( function myError(res) {
});
};
}
答案 0 :(得分:2)
看看Closures。
在showClosureExample
方法中,请注意bound
方法是如何Fat Arrow。粗箭头使它的功能范围lexical
y绑定到其父级上下文,其中scoped
与其自身绑定(Function Scope
)。
当我们在this
中引用scoped
时,我们得到了函数的上下文,当我们在this
中登录了bound
时,我们得到了Foo
(this.foo
的上下文。 )
class Foo {
constructor () {
this.foo = null
this.showClosureExample()
}
showClosureExample () {
const scoped = function () {
console.log(this)
}
const bound = () => {
console.log(this)
}
scoped() // Logs undefined
bound() // Logs the properties of Foo
}
}
new Foo()
尝试将then
回调绑定为词法(y)。
如果您不想使用粗箭头,则可以使用Bind
方法将上下文传递给回调函数
class Foo {
constructor () {
this.foo = null
this.showClosureExample()
}
showClosureExample () {
const boundToFoo = function () {
console.log(this)
}.bind(this)
boundToFoo() // Logs the properties of Foo
}
}
new Foo()
答案 1 :(得分:0)
在您中然后关闭,this.artists不存在。 您有两个选择
异步/等待-您可能希望此任务在后台完成,因此异步/等待并不理想!
在您的Then块中调用set方法
例如
getArtists() {
this.$http.get("https://api.spotify.com/v1/search?
q=Muse&type=track%2Cartist&market=US&limit=10&offset=5",
{headers: {
'Authorization': <Authorization>}, params
}).then(function mySuccess(res) {
//this.artists = res.data;
setArtists(res.data);
}).catch( function myError(res) {
});
};
}
setArtists(artists) {
this.artists = artists
}