JavaScript pouchDb单文档数据检索

时间:2018-04-06 05:29:11

标签: javascript promise javascript-objects pouchdb

我对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的工作原理。

1 个答案:

答案 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"着眼于此,值得一读。