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

标签 javascript typescript firebase async-await google-cloud-firestore

我正在尝试从 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>[]' is not assignable to parameter of type 'Employee[] .我不知道如何获得 Employee[]Promise<Employee>[]所以我可以调用 resolve。

最佳答案

使用 Promise.resolve() 将您的常量/变量 employees 提升为 Promise

subscribe() 之前使用 reduce() 将您的 employees 整理成一个 Employee 数组。

如果每个 employee 都作为 Promise 返回,则使用带有 Rx.Observable 的 flatMap() 解包该 promise。 from()reduce() 之前。

关于javascript - Promise<Employee>[] 不可分配给 Employee[] 类型的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52155760/

相关文章:

javascript - 我如何在发布请求javascript中包含ssl证书

firebase - 找不到 com.google.firebase :firebase-core:10. 0.1

ios - Swift 3 Firebase : current user login success, 事件已在 Firebase 控制台中删除此用户

javascript - 如何捕获所有ajax请求被接收的事件

javascript - 我不能在 react-dom/client 中使用 createRoot 函数

javascript - 我试图理解 Javascript 中的这段嵌套对象

typescript - 元组的 TypeScript 中的通用类型包装

javascript - 如何使用经过身份验证的 id token 和数据库规则保护 Firebase Cloud Function HTTP 端点?

javascript - 如果元素属于嵌套元素,则选择过滤它们的元素

javascript - 减少将函数添加到函数队列的样板