我从API调用中获得了一个对象数组,然后根据两个键:story_title
和title
来过滤值。如果两个值都为null,则将过滤对象。然后,我遍历过滤后的对象数组,以将某些数据从过滤后的数组保存到mongodb(使用mongoose)。问题是我想用一个title
键保存文档,所以我创建了一个函数来检查story_title
或title
是否为空并返回非空值。>
该函数无法正常运行,因为title
循环内的for
中的函数返回了一些null
值。
function pickTitle(title, story_title) {
if (!story_title) {
return story_title;
} else {
return title
}
}
everyHour: async () => {
try {
data = await axios.get(url);
let posts = data.data.hits;
const filteredPosts = await posts.filter((elem) => {
return (!elem.title || !elem.story_title)
});
for (let filtered of filteredPosts) {
Post.updateOne({
_id: filtered.objectID,
author: filtered.author,
title: await pickTitle(filtered.title, filtered.story_title),
created_at: filtered.created_at,
},
{$setOnInsert: filtered},
{upsert: true},
function(err, numAffected) {
if (err) {
//console.log("err")
} else {
//console.log(numAffected)
}
})
.then(res => {
//console.log(res)
})
.catch(err => {
//console.log(err)
});
}
} catch(error) {
console.log(error);
}
}
答案 0 :(得分:0)
这里有一些问题。我将在代码中的一些注释中逐步介绍它们,并将“解决方案”直接放在注释的代码下方。
<template>
<button @click="showHideAge=!showHideAge">Show/Hide Age</button>
<b-table striped hover :items="items"></b-table>
</template>
<script>
const items = [
{ isActive: true, age: 40, first_name: 'Dickerson', last_name: 'Macdonald' },
{ isActive: false, age: 21, first_name: 'Larsen', last_name: 'Shaw' },
{ isActive: false, age: 89, first_name: 'Geneva', last_name: 'Wilson' },
{ isActive: true, age: 38, first_name: 'Jami', last_name: 'Carney' }
]
export default {
data () {
return {
items: items,
showHideAge: true
}
}
}
</script>
是非异步的,正在pickTitle
中await
Promise.all()
或title
进行过滤。这意味着只有一个需要成立。两者都可能为NULL。因此,如果两个函数都为NULL,则story_title
函数将返回空值。如果您希望始终至少有 其中一个包含一个值,则需要更改array.filter的工作方式。pickTitle