【发布时间】:2021-08-03 03:57:04
【问题描述】:
const generatePropertyAmenities = async (property) => {
let result = [];
property.amenities.map(async (res, key) => {
/**
* Get the amenities type id, creates it if it doesn't exist
* const type_existed_before: defines if the type already existed
*/
let type_id = null;
const type_existed_before = await strapi
.query("amenities-categories")
.findOne({ name: res.type.trim() });
if (type_existed_before) type_id = type_existed_before.id;
else
type_id = await strapi
.query("amenities-categories")
.create({ name: res.type }).id;
res.items.map(async (amenity) => {
const amenity_exists = await strapi
.query("amenities")
.findOne({ name: amenity.name.trim() });
if (amenity_exists) {
// console.log(amenity_exists)
if (
!type_existed_before ||
(type_existed_before &&
!amenity_exists.amenities_categories.find((x) => x === type_id))
) {
await strapi.query("amenities").update(
{ id: amenity_exists.id },
{
amenities_categories: [
...amenity_exists.amenities_categories,
type_id,
],
}
);
}
result = [...result, amenity_exists.id];
} else {
result = [
...result,
await strapi
.query("amenities")
.create({
name: amenity.name.trim(),
amenities_categories: [type_id],
}).id,
];
}
});
});
console.log(result);
return result;
};
结果总是空的,我在这里遗漏了什么吗?我真的不明白我做错了什么。我检查了所有内容,amenity_exists.id 是正确的,一切似乎都是正确的,但有些东西不是我真的需要一些帮助
【问题讨论】:
-
可能是因为异步,参见例如eloquentjavascript.net/11_async.html
-
如果您不打算使用
.map()的返回值,那么您一开始就不应该使用.map()。.map()不关心带有异步操作的回调(或async/await)。 How to return the response from an asynchronous call -
你说得对,这正是问题所在
标签: javascript node.js arrays