Angular Foreach循环中的角度承诺

Angular Foreach循环中的角度承诺,angular,promise,Angular,Promise,下面的代码有问题,因为它没有返回任何内容。我怎么修理它 public checkExistence(value: Item, tableName: string, schema: string): Promise<string>{ var result = ""; this.configData.forEach(element => { if(element.key.tableName === tableName && element.check

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

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 + "|";
          }
        })
      });
    }
  });
}
public-checkExistence(值:Item,表名:string,模式:string):Promise{
var结果=”;
this.configData.forEach(元素=>{
if(element.key.tableName==tableName&&element.checkExist!=null){
让uiValue=value[element.key.columnName];
让refTargets=element.checkExist.split(“|”);
refTargets.forEach(target=>{
设targetTableColumn=target.split(',',2);
let table=targetTableColumn[0];
设column=targetTableColumn[1];
this.getRefData(架构、表、列)。然后((值:string[])=>{
if(!(value.indexOf(uiValue)>-1)){
结果=结果+表格+”,“+列+”;
}
})
});
}
});
}
此函数的全部目的是检查某些参考表的某些列中是否存在
value[element.key.columnName]
。可以检查多个引用表(因此
refTargets.forEach

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

发现了类似的案例,但不确定如何将其应用到我的案例中。

开始学习角度和承诺,并感谢您的帮助

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

试试这个

解释: 以下代码

  • 制作一个
    Promise
    数组,其中每个
    Promise
    将解析为
    表+“,“+列+”|“
    字符串
  • 在创建的
    Promise
    数组上执行
    Promise.all()。这将解析为
    表+“,”+列+“|”
    字符串的数组
  • 返回一个
    Promise
    ,它将解析为步骤2中
    table+“,“+column+”|“
    字符串数组的字符串结果
  • 代码:

    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();
                    })
            }
    
    public-checkExistence(值:Item,表名:string,模式:string):Promise{
    //var结果=”;
    让承诺:承诺[]=[];
    this.configData.forEach(元素=>{
    if(element.key.tableName==tableName&&element.checkExist!=null){
    让uiValue=value[element.key.columnName];
    让refTargets=element.checkExist.split(“|”);
    refTargets.forEach(target=>{
    设targetTableColumn=target.split(',',2);
    let table=targetTableColumn[0];
    设column=targetTableColumn[1];
    让promise:promise=this.getRefData(模式、表、列)。然后((值:string[])=>{
    if(!(value.indexOf(uiValue)>-1)){
    return/*result=result+*/table+,“+列+”;
    }
    返回“”;
    });
    承诺。推动(承诺);
    });
    }
    });
    回报承诺。全部(承诺)
    。然后((结果:string[])=>{
    返回结果。join();
    })
    }
    
    试试这个

    解释: 以下代码

  • 制作一个
    Promise
    数组,其中每个
    Promise
    将解析为
    表+“,“+列+”|“
    字符串
  • 在创建的
    Promise
    数组上执行
    Promise.all()。这将解析为
    表+“,”+列+“|”
    字符串的数组
  • 返回一个
    Promise
    ,它将解析为步骤2中
    table+“,“+column+”|“
    字符串数组的字符串结果
  • 代码:

    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();
                    })
            }
    
    public-checkExistence(值:Item,表名:string,模式:string):Promise{
    //var结果=”;
    让承诺:承诺[]=[];
    this.configData.forEach(元素=>{
    if(element.key.tableName==tableName&&element.checkExist!=null){
    让uiValue=value[element.key.columnName];
    让refTargets=element.checkExist.split(“|”);
    refTargets.forEach(target=>{
    设targetTableColumn=target.split(',',2);
    let table=targetTableColumn[0];
    设column=targetTableColumn[1];
    让promise:promise=this.getRefData(模式、表、列)。然后((值:string[])=>{
    if(!(value.indexOf(uiValue)>-1)){
    return/*result=result+*/table+,“+列+”;
    }
    返回“”;
    });
    承诺。推动(承诺);
    });
    }
    });
    回报承诺。全部(承诺)
    。然后((结果:string[])=>{
    返回结果。join();
    })
    }
    
    非常感谢。此代码在
    promises.push(promise)
    处出错,它抱怨在运行时承诺“未定义”…在取消操作时忘记初始化承诺。在浪费了很长时间之后,现在它应该可以很好地工作了。非常感谢。此代码在
    promises.push(promise)
    处出错,它抱怨在运行时承诺“未定义”…在取消操作时忘记初始化承诺。现在它应该可以很好地工作了,在这上面浪费了很长时间。谢谢