Angular 类型“Budget[]”不可分配给类型“Promise”属性,而类型“Budget[]”中缺少“Property”

Angular 类型“Budget[]”不可分配给类型“Promise”属性,而类型“Budget[]”中缺少“Property”,angular,typescript,promise,ionic3,google-cloud-firestore,Angular,Typescript,Promise,Ionic3,Google Cloud Firestore,我需要回报你的承诺。但它显示的错误如下: [ts]类型“预算[]”不可分配给类型“承诺”。 类型“Budget[]”中缺少属性“then”。让预算:预算[] 你能告诉我我怎样才能从下面的方法中回复承诺吗 createBudgets(data: Budget[], projectId: string): Promise<Budget[]> { let budgets: Budget[] = []; forEach(data, async (d) => {

我需要回报你的承诺。但它显示的错误如下:

[ts]类型“预算[]”不可分配给类型“承诺”。 类型“Budget[]”中缺少属性“then”。让预算:预算[]

你能告诉我我怎样才能从下面的方法中回复承诺吗

 createBudgets(data: Budget[], projectId: string): Promise<Budget[]> {
    let budgets: Budget[] = [];
    forEach(data, async (d) => {
      const budgetId: string = this.fireStore.createId();
      d.id = budgetId;
      budgets.push(d);
      await this.fireStore.doc<Budget>(`projects/${projectId}/budgets/${budgetId}`).set({
        id: budgetId,
        amount: d.amount,
        contingency: d.contingency,
        budgetGroup: d.budgetGroup,
        creationTime: moment().format()
      });
    });
    return budgets;// error shows here?
  }

如果要等待所有set方法调用完成执行,则需要将它们添加到数组中,并使用Promise.all等待它们完成:

async createBudgets(data: Budget[], projectId: string): Promise<Budget[]> {
    let budgets : Budget[] = [];
    await Promise.all(data.map(async (d) => {
        const budgetId: string = this.fireStore.createId();
        d.id = budgetId;
        budgets.push(d);
        await this.fireStore.doc<Budget>(`projects/${projectId}/budgets/${budgetId}`).set({
            id: budgetId,
            amount: d.amount,
            contingency: d.contingency,
            budgetGroup: d.budgetGroup,
            creationTime: moment().format()
        });
    }));
    return budgets;
}

熟悉承诺、决心和或承诺吗?这并不是一种传统的方法。请发布你的解决方案好吗@一般的想法是,当它应该是一个承诺时,您可以声明budgets:Budget[]。为什么不将createBudgets定义为预算[]?您已经在使用wait处理异步,因此您可以访问不带承诺的数据。希望这能有所帮助这里的问题是,我需要在预算存储在数据库中之后获取预算。不是在它之前。如果我只使用Budget[],那么它会在数据库中持久化数据之前返回。所以我需要避免这种情况。你知道我怎么做吗@BagleyYes,将wait设置为变量const mywait=wait…,然后返回变量。不过,我对你的总体计划有点困惑,我想你可能是想在这里重新发明一个轮子。我不得不假设fireStore有一种方法可以返回一个承诺,而不使用wait-ready-implemented方法,但我不使用这个库!谢谢: