代码之家  ›  专栏  ›  技术社区  ›  xzk

foreach环内的角承诺

  •  0
  • xzk  · 技术社区  · 6 年前

    下面的代码有问题,因为它没有返回任何内容。我该怎么修?

    public checkExistence(value: Item, tableName: string, schema: string): Promise<string>{
      var result = "";
      this.configData.forEach(element => {
        if(element.key.tableName === tableName && element.checkExist != null){
          let uiValue = value[element.key.columnName];
          let refTargets = element.checkExist.split("|");
          refTargets.forEach(target => {
            let targetTableColumn = target.split(',', 2);
            let table = targetTableColumn[0];
            let column = targetTableColumn[1];
             this.getRefData(schema,table,column).then((value: string[]) => {
              if (!(value.indexOf(uiValue) > -1)){
               result = result + table + "," + column + "|";
              }
            })
          });
        }
      });
    }
    

    这个函数的全部目的是检查是否存在。 value[element.key.columnName] 在一些引用表的某些列中。可能要检查多个引用表(因此 refTargets.forEach )中。

    最后,我希望此函数返回一个字符串,该字符串表示不包含此值的表/列的列表。

    发现了类似的案例,但不知道如何将其应用到我的案例中。 Angular chaining promises from foreach loop

    开始学习有棱角和承诺,如果你能帮忙的话,请感激。

    如果你认为这个函数可以用更好的方式编写,请告诉我。如果有效,我会接受的:)

    1 回复  |  直到 6 年前
        1
  •  1
  •   Sandeep Gupta    6 年前

    试试这个。

    说明: 以下代码

    1. 使 Promise 数组中每个 承诺 将决心 table + "," + column + "|" 弦。
    2. Promise.all() 在创建时 承诺 阵列。这将解析为 表+“,”+列+“” 串。
    3. 返回A 承诺 它将解析为字符串结果的数组 表+“,”+列+“” 步骤2中的字符串。

    代码

    public checkExistence(value: Item, tableName: string, schema: string): Promise<string>{
                // var result = "";
                let promises:Promise<string>[] = [];
                this.configData.forEach(element => {
                    if(element.key.tableName === tableName && element.checkExist != null){
                        let uiValue = value[element.key.columnName];
                        let refTargets = element.checkExist.split("|");
                        refTargets.forEach(target => {
                            let targetTableColumn = target.split(',', 2);
                            let table = targetTableColumn[0];
                            let column = targetTableColumn[1];
                            let promise: Promise<string> = this.getRefData(schema,table,column).then((value: string[]) => {
                                if (!(value.indexOf(uiValue) > -1)){
                                    return /*result = result + */ table + "," + column + "|";
                                }
                                return "";
                            });
    
                            promises.push(promise);
                        });
                    }
                });
                return Promise.all(promises)
                    .then((results:string[])=>{
                        return results.join();
                    })
            }