Javascript 承诺回报值

Javascript 承诺回报值,javascript,vue.js,promise,Javascript,Vue.js,Promise,我知道这个问题在很多方面都被问了好几次。但我真的不明白: 我有一个明确的承诺。我可以对这个对象进行console.log,一切似乎都很好。我能看到,我想看到的 我使用PockDB和NuxtJS(VueJS) 这很有效。我的结果是我期望和希望看到的: { text: "testen", _id: "2", _rev: "1-c7e7c73d264aa5e6ed6b5cc10df35c5a" } 太好了。但是现在我正在努力返回这个值,以便其他函数可以访问它。尤其是返回这些数据

我知道这个问题在很多方面都被问了好几次。但我真的不明白:

我有一个明确的承诺。我可以对这个对象进行console.log,一切似乎都很好。我能看到,我想看到的

我使用PockDB和NuxtJS(VueJS)

这很有效。我的结果是我期望和希望看到的:

{
   text: "testen", 
   _id: "2", 
   _rev: "1-c7e7c73d264aa5e6ed6b5cc10df35c5a"
}
太好了。但是现在我正在努力返回这个值,以便其他函数可以访问它。尤其是返回这些数据。在VueJS中,例如:

// ..
export default {
   data() {
      return {
         doc: testDoc
      }
   }
}
所以我可以通过实例访问它。但当然,若我这样做,数据就是承诺

data: [
   doc: promise
]
但我需要的是价值,而不是它是什么。我不知道如何返回值

我读过好几本如何做的书。我想,我理解回调和承诺的区别。使用和异步函数,我得到了相同的结果。但所有示例都始终与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直接控制这些数据,在您的示例中,testDoc现在包含一个函数。不是承诺,也不是你从允诺者那里得到的
doc
。要获得实际的
doc
,您需要进入承诺范围。像这样

let testdb = new PouchDB('testdb');

testdb.get('2').then(function (doc) {

    // Your doc is here
    console.log(doc);
    return doc;
}).catch(function (err) {
    console.log(err);
});
或者,您可以使用如下语法

let doc = await testdb.get('2');
// Your doc is here
console.log(doc);

示例中的
testDoc
现在包含一个函数。不是承诺,也不是你从允诺者那里得到的
doc
。要获得实际的
doc
,您需要进入承诺范围。像这样

let testdb = new PouchDB('testdb');

testdb.get('2').then(function (doc) {

    // Your doc is here
    console.log(doc);
    return doc;
}).catch(function (err) {
    console.log(err);
});
或者,您可以使用如下语法

let doc = await testdb.get('2');
// Your doc is here
console.log(doc);

在安装组件时,您应该更新您的
状态文档
,然后您的文档将可用于组件中的任何位置

export default {
  data() {
    return {
      doc: [],
      error : ""
    }
  },
  mounted: () => {
    testdb.get('2').then(doc => {
      this.doc = doc;
    }).catch(function(err) {
      this.error = err;
    });
  }
} 

在安装组件时,您应该更新您的
状态文档
,然后您的文档将可用于组件中的任何位置

export default {
  data() {
    return {
      doc: [],
      error : ""
    }
  },
  mounted: () => {
    testdb.get('2').then(doc => {
      this.doc = doc;
    }).catch(function(err) {
      this.error = err;
    });
  }
} 
您可以使用等待承诺解决:

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

UPD(通过评论):

您可以使用等待承诺解决:

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

UPD(通过评论):


好的,好的。但是如何从该函数外部访问此
doc
?您可以返回承诺,也可以在
wait
示例中将其作为正常变量返回。无论哪种方式,要在另一个函数中获得它,您都需要执行相同的过程。您可以使用
.then()
async/await
ok来调用它。但是如何从该函数外部访问此
doc
?您可以返回承诺,也可以在
wait
示例中将其作为正常变量返回。无论哪种方式,要在另一个函数中获得它,您都需要执行相同的过程。您可以使用
.then()
async/await
调用它,该函数可能重复:。您需要有两个返回,一个在promise函数中,另一个用于testdb函数。您无法获取该值,因为您没有从testdb函数返回任何内容。或者最好改用async/await。的可能重复项:。您需要有两个返回,一个在promise函数中,另一个用于testdb函数。您无法获取该值,因为您没有从testdb函数返回任何内容。或者最好改用async/wait。使用
async/wait
的好方法,但我不建议使用这种方法,因为它会影响组件的装载,而且您对错误没有太多的控制权。也可以想象一下,如果您想在这之前添加加载程序……哦。。。你是对的!Nuxt页有异步数据,但组件-没有。我会更新答案的。哇。呜呜。非常感谢你。这符合我的需要。现在是我可以访问的对象。是的,它在nuxt页面上,而不是在component中。使用
async/wait
的好方法,但我不建议使用这种方法,因为它会影响组件的装载,而且您对错误没有太多的控制,还可以想象一下,如果您想在此之前添加某个加载程序……哦。。。你是对的!Nuxt页有异步数据,但组件-没有。我会更新答案的。哇。呜呜。非常感谢你。这符合我的需要。现在是我可以访问的对象。是的,它在nuxt页面上,而不是在组件中。