下面的代码有问题,因为它没有返回任何内容。我该如何解决?
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
开始学习Angular和Promise,并感谢您的帮助。
如果您认为本函数可以用更好的方式编写,请告诉我。如果可以的话,我会接受的:)
答案 0 :(得分:1)
尝试一下。
说明: 以下代码
Promise
数组,其中每个Promise
都将解析为table + "," + column + "|"
字符串。 Promise.all()
数组执行Promise
。这将解析为table + "," + column + "|"
个字符串数组。 Promise
,它将解析为一个字符串,导致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();
})
}