javascript - 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 直接控制这些数据
解决方案
您可以使用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;
},
推荐阅读
- java - 获取String值的ArrayList的值
- c - for 循环正在初始化三个变量
- django - 使用 Django Rest Framework 搜索后如何获取查询集值
- android - Android:处理不同dip设备的文本大小
- react-native - React Native 应用程序在启动时崩溃 - 仅在某些 Android 和 IOS 设备上
- exception - Camel Spring DSL onException 根本不会触发
- html - 如何使用 flexbox 仅在移动设备上堆叠两个元素
- java - 在 Spock 测试中使用 @Client 在 Micronaut 中进行 HTTP 多部分文件上传
- sql - 使用滞后函数按行检索数据
- android - 如何使用 q python 访问 android 中的电话号码?