首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript pouchDb单据取数

JavaScript pouchDb单据取数
EN

Stack Overflow用户
提问于 2018-04-06 13:29:11
回答 1查看 121关注 0票数 0

我是JavaScript的新手,似乎在任何地方都找不到这个问题的答案。

我希望检索由promise get()返回的pouchDb,并能够在查询数据库时使用promise函数之外的数据。

这是我到目前为止已经尝试过的:

代码语言:javascript
复制
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

出于某种原因,我也随机尝试了一下,得到了意想不到的结果。

代码语言:javascript
复制
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是如何工作的。

EN

回答 1

Stack Overflow用户

发布于 2018-04-06 16:49:53

您不能以代码中的方式在promise之外使用"get“数据库调用的结果。这是因为在数据库有机会响应之前,console.log行就已经在程序中执行了。如果您将console.log行放在promise结果中,它应该可以工作……

代码语言:javascript
复制
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"研究了这一点,值得一读。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49685960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档