使用节点js时,无法修改couchbase回调内的变量

时间:2016-12-08 08:35:07

标签: node.js

我不知道这是否正常但是当我尝试在Couchbase中的回调(node.js回调)中访问变量时,它无法正常工作。

   var obj = new Object();
   bucket.get(key, function(error, count) {
    bucket.get(key2, function(error, prop) {
      obj.entry = prop.value.value;
      obj[entry+"_date"] = new Date(prop.value.created_at).toString();
    })
  })

我错过了什么吗?

另外:我无法在回调中声明Object var,因为我稍后会访问它。

1 个答案:

答案 0 :(得分:1)

好的,我会试试这个:

var obj = {};
   bucket.get(key, function(error, count) {
    bucket.get(key2, function(error, prop) {
      obj[entry] = prop.value.value;
      var extraKey = entry+"_date"; // ensure this is an string
      obj[extraKey] = new Date(prop.value.created_at).toString();
      console.log(obj); 
      // obj[entry] exists here
    })
  })

// but obj would be empty here :(

另外请记住,如果你在回调的上下文之后使用obj,实际上你可能没有设置属性,只是因为回调还没有执行。回调是异步的。你想要用obj个新道具做的任何事情应该发生在设置它们的相同环境中。另一个选择是使用promises重构此代码,这样您就可以拥有所需的执行顺序。