Async
функция возвращает [object Promise]
, но желаемое поведение возвращает реальное значение.
Я могу получить значение от console.log
.
Я предполагаю, что это ожидаемое поведение функции, но я не знаю, как исправить мой код.
Это в коде vue.js с использованием Electron-Vue и NeDB.
<template>
<div>
{{ testNedb3('NDId6sekw6VYLmnc') //this is a test by adding specific id }}
</div>
</template>
<script>
import Promise from 'bluebird'
export default {
methods: {
dbFindAsync2: function (db, opt) {
return new Promise(function (resolve, reject) {
db.find(opt, function (err, doc) {
if (err) {
reject(err)
} else {
resolve(doc)
}
})
})
},
testNedb3: async function (id) {
const flattenMemAsync = function (arr) {
return new Promise(function (resolve) {
Array.prototype.concat.apply(
[],
arr.map(function (arr) {
resolve(arr.members)
})
)
})
}
const filterByNameIdAsnc = function (arr) {
return new Promise(function (resolve) {
const result = arr.filter(function (member) {
return member.nameId === id
})
resolve(result)
})
}
this.dbFindAsync2(
this.$db, { 'members.nameId': id }, { 'members': 1, _id: 0 }
).then(function (res) {
const docs = res
flattenMemAsync(docs).then(function (res) {
const flatMembers = res
filterByNameIdAsnc(flatMembers).then(function (res) {
console.log('result', res)
console.log('result_firstname', res[0].firstName)
return res
})
})
})
},
this.$db
получает данные из NeDB, и данные представляют собой двумерный массив, поэтому я пытаюсь выровнять массив по flattenMemAsync
и удалить неожиданные данные по filterByNameIdAsnc
.
console.log('result', res)
возвращает массив, а console.log('result_firstname', res[0].firstName)
возвращает строку.
Я изменил код вызова с {{ testNedb3('NDId6sekw6VYLmnc') }}
на {{ {{ testNedb3('NDId6sekw6VYLmnc').then(value => {return value}) }}
, но результат тот же.
Также изменен на {{ await testNedb3('NDId6sekw6VYLmnc').then(value => {return value}) }}
, но я получил ошибку «Ошибка синтаксического анализа: невозможно использовать ключевое слово« await »вне асинхронной функции.».
Любой комментарий может помочь мне.
Спасибо.