我是JavaScript的新手,似乎在任何地方都找不到这个问题的答案。
我希望检索由promise get()返回的pouchDb,并能够在查询数据库时使用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是如何工作的。
发布于 2018-04-06 16:49:53
您不能以代码中的方式在promise之外使用"get“数据库调用的结果。这是因为在数据库有机会响应之前,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)
})
例如,您可以从promise结果中调用另一个函数,或者如果您需要做一件又一件事情,则可以将promise链接在一起。Nolan Lawson的文章"We Have A Problem With Promises"研究了这一点,值得一读。
https://stackoverflow.com/questions/49685960
复制相似问题