我对JavaScript很新,我似乎无法在任何地方找到答案。
我想检索pouchDb get()返回的JSON,并且能够在查询数据库时使用的promise函数之外使用该数据。
这是我到目前为止所尝试的内容:
var row;
db.get(id)
.then(function(doc){
row = JSON.parse(JSON.stringify(doc));
})
.catch(function(err){
console.log(err)
})
console.log(row) //logs undefined
我也因为某种原因随机尝试了这个并得到了意想不到的结果。
var myArray = []
var row;
db.get(id)
.then(function(doc){
row = JSON.parse(JSON.stringify(doc));
myArray.push(row)
console.log(myArray) //logs Array(1)> 0: Object> my JSON!
console.log(myArray[0]) //logs Object > my JSON!
console.log(myArray[0]._id) //logs My id from my db item
})
.catch(function(err){
console.log(err)
})
console.log(myArray) //logs Array(1) > 0: Object > my JSON!
console.log(myArray[0]) //logs undefined
console.log(myArray[0]._id) //throws Uncaught TypeError: Cannot read property '_id' of undefined + wall of red text
我希望这是有道理的 - 我也可能从根本上误解了javascript的工作原理。
答案 0 :(得分:2)
您不能在代码中使用“获取”数据库调用的结果。这是因为在数据库有机会响应之前,程序中正在执行console.log行。如果将console.log行放在promise结果中,它应该可以工作......
var row;
db.get(id)
.then(function(doc){
row = JSON.parse(JSON.stringify(doc));
console.log(row) //should now work
})
.catch(function(err){
console.log(err)
})
例如,你可以在你的诺言结果中调用另一个函数,或者如果你需要一个接一个地做一件事,你可以将promises链接在一起。 Nolan Lawson的文章"We Have A Problem With Promises"着眼于此,值得一读。