网站搜索

javascript - Promise<Employee>[] 不能分配给类型为 Employee[] 的参数


我正在尝试从 Firestore 数据库加载我的员工集合,对于每个员工,我想加载一个“工作日”,它是“员工”子集合的一个文档。这是我的代码:

loadEmployees() {
    return new Promise<Employee[]>(resolve => {
        this.db.collection('Employees').snapshotChanges().pipe(
            map(changes => changes.map(async a => {
                const employee = a.payload.doc.data() as Employee;
                employee.id = a.payload.doc.id;
                employee.workday = await this.loadWorkday(employee);    // <-- returns a Promise<Workday>

                return employee;
            }))
        ).subscribe(
            employees => {
                resolve(employees); // Error: <--- Promise<Employee>[]' is not assignable to parameter of type 'Employee[]
            }
        );
    });
}

但是我得到了语法错误 Promise<Employee>[]' 无法赋值给类型为 'Employee[] 的参数。我不知道如何从 Promise<Employee>[] 获取 Employee[],以便我可以调用 resolve。

答案#1

使用 Promise.resolve() 将你的常量/变量 employees 升级为 Promise。

在 subscribe() 之前使用 reduce() 将你的 employees 整合成一个 Employee 数组。

如果每个 employee 都作为一个 Promise 返回,那么在使用 reduce() 之前,使用 flatMap() 和 Rx.Observable.from() 来展开该 promise。