【问题标题】:JavaScript pouchDb single doc data retrievalJavaScript pouchDb 单文档数据检索
【发布时间】:2018-09-16 01:53:24
【问题描述】:

我对 JavaScript 还很陌生,我似乎无法在任何地方找到答案。

我想检索 pouchDb get() 返回的 JSON,并能够在查询 db 时使用的 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 的工作原理。

【问题讨论】:

  • db.get(id) .then ... .then 回调中的代码始终是异步的
  • logs Array(1) > 0: Object > my JSON! - 对象的控制台输出不是“静态的”......也就是说,当您在控制台中查看输出时,异步代码已经运行,所以在控制台中它看起来就像 myArray 不是空的......但它是在执行 console.log 时 - 只是“同时”添加了一些东西

标签: javascript promise javascript-objects pouchdb


【解决方案1】:

您不能像在代码中那样在 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" 看了这个,值得一读。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 2019-01-05
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 2021-12-10
    相关资源
    最近更新 更多