MeteorJS:无法分配变量

时间:2015-07-10 15:15:28

标签: javascript node.js meteor callback

我有这样的代码,并希望在函数中将一个变量分配给另一个,代码示例:

Meteor.methods({
              parsing:function(){
                var aa ;
                request("https://google.com/", function(error, response, body) {
                    if (!error && response.statusCode == 200) {
                          var k=1;
                          aa = k;
                    }
                });
                console.log(aa);
              }
});

它是undefined,有人能解释我为什么吗?

编辑:

 Meteor.methods({
                  parsing:function(){
                    var aa ;
                    var tmp;
                    request("https://google.com/", function(error, response, body) {
                        if (!error && response.statusCode == 200) {
                              var k=1;
                              aa = k;
                              console.log(aa);
                              request("https://google.com/xyz", function(error, response, body) {
                                tmp = response.request.uri.href;
                              });
                        }
                        console.log(tmp);
                    });

                  }
    });

例如,只有当我的第二个请求被调用(结束)时才需要console.log(tmp);

1 个答案:

答案 0 :(得分:0)

您提供的request参数功能只有在请求获得Google答案时才会执行。但代码的下一部分(你的console.log行)仍在执行而不等待任何事情。

如果您想在日志前等待请求结果,请将其添加到您的函数中:

parsing:function(){
    var aa ;
    request("https://google.com/", function(error, response, body) {
        if (!error && response.statusCode == 200) {
              var k=1;
              aa = k;
              console.log(aa);
        }
    });
}

编辑:

嗯,你可以多次使用相同的技术:

parsing:function(){
    var aa ;
    var tmp;
    request("https://google.com/", function(error, response, body) {
        if (!error && response.statusCode == 200) {
            var k=1;
            aa = k;
            console.log(aa); // Waited the first answer.
            request("https://google.com/xyz", function(error, response, body) {
                tmp = response.request.uri.href;
                console.log(tmp); // Waited the second one.
            });
        }
    });

}