如何为http get方法返回的变量赋值?

时间:2019-05-10 12:07:58

标签: javascript angularjs

如何为http get方法返回的变量赋值? 我在构造函数中声明了变量this.artists = null。我想将$ http.get返回的值分配给this.artists variableRes.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) {

        });
    };
}

2 个答案:

答案 0 :(得分:2)

看看Closures

showClosureExample方法中,请注意bound方法是如何Fat Arrow。粗箭头使它的功能范围lexical y绑定到其父级上下文,其中scoped与其自身绑定(Function Scope)。 当我们在this中引用scoped时,我们得到了函数的上下文,当我们在this中登录了bound时,我们得到了Foothis.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不存在。 您有两个选择

  1. 异步/等待-您可能希望此任务在后台完成,因此异步/等待并不理想!

  2. 在您的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
}