$.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的值仍为空对象。 我确信这不会被称为错误功能,因为浏览器没有显示警报窗口。
答案 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
});