首页 > 解决方案 > Promise 中的返回值

问题描述

我知道这个问题以多种方式被问了好几次。但我真的不明白:

我有一个具有已解决价值的承诺。我可以 console.log 这个对象,一切似乎都很好。我能看到,我想看到的。

我使用 PouchDB 和 NuxtJS (VueJS)

import PouchDB from 'pouchdb'

let testdb = new PouchDB('testdb');

let testDoc = function () {
  testdb.get('2').then(function (doc) {
    console.log(doc);
  }).catch(function (err) {
    console.log(err);
  });
}

这很好用。我的结果是我期望和希望看到的:

{
   text: "testen", 
   _id: "2", 
   _rev: "1-c7e7c73d264aa5e6ed6b5cc10df35c5a"
}

完美的。但是现在我正在努力返回这个值,以便其他函数可以访问它。特别是返回这些数据。在 VueJS 中,例如:

// ..
export default {
   data() {
      return {
         doc: testDoc
      }
   }
}

所以我可以通过实例访问它。但是当然,如​​果我那样做,数据就是承诺

data: [
   doc: promise
]

但我需要的价值,而不是它是什么。我不明白如何返回值。

我已经阅读了几本 How To。我想,我理解 Callback 和 Promise 之间的区别。使用 async 和 async 函数,我得到相同的结果。但是所有的例子总是带有console.log()。但这对我有用。

有没有人可以访问此(范围内或嵌套?)值的示例?

如果我返回数据:

let testdb = new PouchDB('testdb');

let testDoc = function () {
  testdb.get('2').then(function (doc) {
    return doc;
  }).catch(function (err) {
    console.log(err);
  });
}

为什么testDoc现在还没有价值?或者黑客的价值在哪里?

我总是通过将值提交到 vuex 存储来做到这一点。这也很好用。

let fetchOrga = async function({ store }) {
  try {
    let orgaDoc = await orgadb.get('orga');
    store.commit('orgaUpdate', orgaDoc)
  } catch (err) {
    console.log(err);
  }
}

但就像我说的,我想通过 IndexedDB 直接控制这些数据

标签: javascriptvue.jspromise

解决方案


您可以使用async/await等到 promise 解决:

// nuxt.js way
async asyncData() {
  let testdb = new PouchDB('testdb');
  return {
    doc: await testdb.get('2'),
  };
},

UPD(通过评论):

data() {
  return {
    isReady: false,
    doc: null,
  };
},
async mounted() {
  let testdb = new PouchDB('testdb');
  this.doc = await testdb.get('2');
  this.isReady = true;
},

推荐阅读