我知道这个问题通过几种方式被问过几次。但是我真的不明白:
我有一个具有解决价值的承诺。我可以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
]
但是我需要的是价值,而不是价值。我不明白如何返回值。
我已经阅读了几本“如何做”。我想,我了解Callback和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直接控制这些数据
答案 0 :(得分:3)
您可以使用async/await等到承诺解决:
// 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;
},
答案 1 :(得分:1)
在组件的安装中,您应该更新state doc
,然后您的文档才能在组件内部的任何位置使用。
export default {
data() {
return {
doc: [],
error : ""
}
},
mounted: () => {
testdb.get('2').then(doc => {
this.doc = doc;
}).catch(function(err) {
this.error = err;
});
}
}
答案 2 :(得分:0)
testDoc
现在包含函数。这不是承诺,也不是您从承诺中获得的doc
。要获得实际的doc
,您需要进入 promise 。像这样
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);
});
或者,您可以像这样使用async/await语法
let doc = await testdb.get('2');
// Your doc is here
console.log(doc);