我的cloudant数据库中有一个_id
mittens13
的文档。我试图在查询语句中查询它并发出警报,另一个在查询语句之外。
但是,首先调用查询语句之外的那个,它发出undefined
的警报,然后它给出了另一个警告hello
,它是文档中的项目。我可以知道为什么吗?
Javascript代码
function queryDB() {
var price;
db.get("mittens13", function (err, response) {
console.log(err || response);
alert(response.title);
price = response.title;
});
alert(price);
}
我的数据库中的文档详情
{
"_id": "mittens13",
"_rev": "1-78ef016a3534df0764bbf7178c35ea11",
"title": "hello",
"occupation": "kitten123"
}
答案 0 :(得分:2)
问题:为什么alert(price);
会产生undefined
?
alert(price)
显示未定义的原因,即使代码是在db.get
代码之后编写的,因为db.get
是异步的。
因为它是异步调用,所以程序在继续之前不会等待db.get
的响应。因此,在db.get
回来之前,您的计划已经到达alert(price);
行。它看起来并且看到关于价格的唯一其他代码是var price;
。如果您尝试打印,则会导致未定义。
你应该研究ajax和回调。
答案 1 :(得分:1)
db.get是异步的,所以在调用alert(price)之前,函数实际上仍在运行(在不同的线程上)。我认为正确的方法是:
db.get("mittens13", function (err, response) {
console.log(err || response);
alert(response.title);
price = response.title;
}).then(function(){ alert(price) };