无法访问Meteor事件

时间:2015-09-15 20:43:22

标签: javascript meteor

当我触发click事件时,此函数运行:

'click h2.start1': function () {
      var genreName;
      //generate random number
      function getGenreNumber () {
        numGenre = Math.floor((Math.random() * 500) + 1); //total genres: 1381
        console.log('genre index number: ' + numGenre);
        return numGenre
      };
      //http.get genre with number genre/list
      function getGenreName () {
        HTTP.get('someurl',
        {},
        function (error, result) {
          if (result.statusCode === 200) {
            genreName = result.data.response.genres[numGenre].name;
            console.log('The genre is: ' + genreName);
          }
        return genreName
        });
      };
      //http.get 15 artists of genre genre/artist
      function getGenreArtists () {
        console.log('genreName is: ' + genreName); //this is undefined
        HTTP.get('someurl' + genreName,
        {},
        function (error, result) {
          if (result.statusCode === 200) {
            console.log(result.data.response);
            console.log(genreName);
          }else {
            console.log("something broke");
            console.log(genreName); //this is exactly as it should be!
          }
        });
      };
      getGenreNumber()
      getGenreName()
      getGenreArtists()
},

我尝试做两件事,首先,将变量genreName的值传递到函数getGenreArtists中的GET请求的url中。

getGenreArtists中的第一个console.log是未定义的,但是行#34下的console.log已经破坏了#34;正确回归。

我感到困惑,因为两个函数都有相同的范围,因为函数getGenreName能够正确访问变量numGenre

我要做的第二件事是用+中的genreName替换任何空格,这样GET请求的网址格式就会正确。

1 个答案:

答案 0 :(得分:0)

这是一个普通的异步问题。一般来说,如果要对异步事件中的数据执行某些操作,则传递回调(或使用promise)。例如,您的getGenreName看起来更像是这样:

function getGenreName(callback) {
  HTTP.get('someurl', {}. function (error, result) {
    if (result.statusCode === 200) {
      callback(result.data.response.genres[numGenre].name);
    }
  });
}

然后这样称呼:

getGenreName(function (name) {
  console.log('the name of the genre is: ' + name);
});