javascript对象未定义

时间:2013-11-05 09:39:03

标签: javascript couchdb

$.couch.urlPrefix = "http://192.168.0.5:5984";
var db = $.couch.db("disastri");

var doc;
 db.openDoc("esempio",{
  success: function(data){
   doc = data;
  },
  error: function(err){
   alert("ERRORE: " + err);
  },
  attachments: true
});

console.log(doc);

为什么呢?对象doc是未定义的? 如果我尝试将doc初始化为空对象,则doc的值仍为空对象。 我确信这不会被称为错误功能,因为浏览器没有显示警报窗口。

2 个答案:

答案 0 :(得分:2)

db.openDoc() - 这是异步调用,这意味着下一个运算符 console.log(doc)不等待它完成并在回调函数之前运行<强>成功或错误来电。

console.log()放入回调:

var doc;
 db.openDoc("esempio",{
  success: function(data){
   doc = data;
   console.log(doc); // <--- HERE
  },
  error: function(err){
   alert("ERRORE: " + err);
  },
  attachments: true
});

现在,当 openDoc()完成并且 doc 已定义时,将调用它。

答案 1 :(得分:1)

db.openDoc异步工作 - 这意味着js解释器不会等待db.openDoc执行其工作。它启动异步函数,并继续执行以下代码行 - 异步仍然有效。因此,在这种情况下,console.log(doc);会在 db.openDoc之前执行。您需要做的是将日志调用移动到success回调:

$.couch.urlPrefix = "http://192.168.0.5:5984";
var db = $.couch.db("disastri");

var doc;
db.openDoc("esempio", {
    success: function(data){
        doc = data;
        console.log(doc);
    },
    error: function(err){
        alert("ERRORE: " + err);
    },
    attachments: true
});