如何覆盖JavaScript变量



我正在从事一个express.io mini项目,我被困在这个变量覆盖问题上。

这是我的代码:

get_time_offset = function(timezone_id){
   Timezone.findById(timezone_id, function(err, doc){
        if(err) {
            console.log(err);
        } else {
            console.log(doc.offset);
        }
   });
}

此代码块可以通过Console.log显示doc.offset的值,而没有任何问题,我想使doc.offset在时区对象之外使用。这是我到目前为止所提出的:

get_time_offset = function(timezone_id){
    var offset;
    Timezone.findById(timezone_id, function(err, doc){
       if(err) {
            console.log(err);
       } else {
          offset = doc.offset;
       }
    });
    console.log(offset);
}

它说"偏移是不确定的",我似乎找不到任何解决此问题的方法。

我认为要么将您的初始声明更改为...

var offset = {};

...或,您的console.log在您的功能完成之前要执行。通过在功能中添加日志来简单检查...

    } else {
      offset = doc.offset;
      console.log('from inside ... ', offset);
    }
   });
  }
console.log('from outside ... ', offset);

...并查看"外部"是否首先发射。

编辑:

如果"从外部"首先运行,请通过初始函数调用后续代码。

get_time_offset = function(timezone_id){
  var offset;
  function processResult(val) {
    console.log(val);
  }
  Timezone.findById(timezone_id, function(err, doc){
    if(err) {
      console.log(err);
    } else {
      offset = doc.offset;
    }
    processResult(offset);
  });
}

如果要在函数中提供偏移量,则可以将其作为参数传递,此处是demo http://thomasdavis.github.io/tutororial/tutororial/anonymous-functions.html

var scope = {offset : 10};
get_time_offset = function(timezone_id){
    Timezone.findById(timezone_id, function(err, doc, scope){
        if(err) {
            console.log(err);
        } else {
            scope.offset = doc.offset;
        }
    });
}
console.log(scope.offset);

对不起编辑:我在示例偏移中犯了一个错误,必须是一个对象,通过参考并修改它,这是一个小提琴,我一起入侵了它http://jsfiddle.net.net/vlbvw/4/th/p>

尝试以下:

get_time_offset = function(timezone_id, callback){
    Timezone.findById(timezone_id, function(err, doc){
       if(err) {
            console.log(err);
    callback(false);
       } else {
         callback(doc.offset);
       }
    });
};
get_time_offset(5, function(offset){
   console.log(offset)
});

相关内容

  • 没有找到相关文章

最新更新