我正在尝试创建简单的Vue + CouchDB应用程序。使用Vanilla JS可以正常工作,但我无法通过对我的vue实例的promise或async函数从数据库中获取数据。这是我的代码:
app.html
<div id="vue-app">
<table>
<thead>
<tr>
<th>{{ tableHead.name }}</th>
<th>{{ tableHead.lastname }}</th>
</tr>
</thead>
<tbody>
<tr v-for="data in tableData">
<td>{{ data.name }}</td>
<td>{{ data.lastname }}</td>
</tr>
</tbody>
</table>
</div>
app.js
const db = new PouchDB('testdb')
const couch = {
fetchData: async function () {
var dbData = await db.allDocs({
include_docs: true,
descending: true
}).then(function (result) {
var objects = {}
result.rows.forEach(function (data) {
objects[data.id] = data.doc
})
return objects
}).catch(function(err) {
return err
})
return dbData
}
}
var app = new Vue({
el: '#vue-app',
data: {
tableHead: {
name: 'Name',
lastname: 'Lastname'
}
},
computed: {
async tableData () {
var dbData = await fetchData()
return dbData
}
}
})
希望您可以教给我正确的方法,以便将数据提取到Vue实例中!
答案 0 :(得分:2)
欢迎您!
计算属性并不意味着是异步的。
解决数据异步检索的常用模式是:
data
占位符created
或mounted
上发起异步请求data
。data
。在您的情况下,您将:
tableData
转换为内部data
,就像您的tableHead
couch.fetchData
钩子中调用created
函数。then
链的函数中(或等待之后),将结果分配给tableData
tableData
(无需更改)