在typescript中使用promise筛选数组
错误是“类型“Promise”上不存在属性“map” 如何筛选此阵列?filterlabel是类似“Test1”的标签的名称 如何筛选标签?我不明白。在typescript中使用promise筛选数组,typescript,Typescript,错误是“类型“Promise”上不存在属性“map” 如何筛选此阵列?filterlabel是类似“Test1”的标签的名称 如何筛选标签?我不明白。 其他过滤器是正确的,但标签过滤器是坏的,因为承诺因为它是一个承诺,所以您应该在过滤之前等待它: const labels=wait r.labels; 结果=结果。过滤器((r)=> labels.map((l)=>l.name==filterLabel)); 而且,看起来您实际上想要的是。一些,而不是。map: const labels=wa
其他过滤器是正确的,但标签过滤器是坏的,因为承诺因为它是一个
承诺
,所以您应该在过滤之前等待它:
const labels=wait r.labels;
结果=结果。过滤器((r)=>
labels.map((l)=>l.name==filterLabel));
而且,看起来您实际上想要的是。一些,而不是。map
:
const labels=wait r.labels;
结果=结果。过滤器((r)=>
labels.some((l)=>l.name==filterLabel));
有人有想法吗?那不行。。。当您使用wait时,您需要一个异步函数,然后过滤器就不需要了work@VLAZ你能帮我吗?@Mephisto_08我已经编辑了答案,现在应该可以用了。
if (filterLabel) {
result = result.filter((r) =>
(r.labels).map((l) => l.name === filterLabel));}
export class Task {
// eslint-disable-next-line new-cap
@PrimaryGeneratedColumn()
id: number;
// eslint-disable-next-line new-cap
@Column()
name: string;
// eslint-disable-next-line new-cap
@Column()
description: string;
// eslint-disable-next-line new-cap
@CreateDateColumn()
created: string;
// eslint-disable-next-line new-cap
@UpdateDateColumn()
updated: string;
// eslint-disable-next-line new-cap
@ManyToMany(() => Label, (label) => label.tasks)
// eslint-disable-next-line new-cap
@JoinTable()
labels: Promise<Label[]>;
// eslint-disable-next-line new-cap
@OneToMany(() => Tracking, (tracking) => tracking.task, {nullable: true})
trackings: Promise<Tracking[]>;
export const getAllTasks = async (req, res) => {
const taskRepository = getRepository(Task);
const tasks = await taskRepository.find(
{relations: ['trackings', 'labels']});
const {filterTask, filterDescription, filterLabel} = req.query;
console.log('1', filterTask, '2', filterDescription, '3', filterLabel,
'4');
let result = [...tasks];
if (filterTask) {
result = result.filter((r) => r.name === filterTask);
}
if (filterLabel) {
filter();
}
if (filterDescription) {
result = result.filter((d) => d.description === filterDescription);
}
res.status(200).send({data: result});
};