0
$.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 的值仍然是空对象。我确定这不是调用错误函数,因为浏览器不会向我显示警报窗口。

4

2 回答 2

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()完成并定义文档时调用。

于 2013-11-05T09:57:06.177 回答
1

db.openDoc异步工作 - 这意味着 js 解释器不等待db.openDoc执行其工作。它启动异步函数,并继续执行以下代码行——而异步仍然有效。因此,在这种情况下console.log(doc);执行before 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
}); 
于 2013-11-05T09:44:51.883 回答