您好,请帮助解决以下问题。我需要通过api获取表的最后一个ID。所以我在main方法内部使用了以下代码,所以我的main方法是一个异步方法。
var runNumber2 = await this.triggerAPI_MDBREADMI_GetFGLINHU2();
以下是triggerAPI_MDBREADMI_GetFGLINHU2方法。
/**
* Trigger API - MDBREADMI_GetFGLINHU2
*/
public triggerAPI_MDBREADMI_GetFGLINHU2() {
let promise = new Promise((resolve, reject) => {
let outputFields: string[] = [];
let index = 0;
let record: M3.MIRecord = new M3.MIRecord();
record.setString("DIVI", "600");
record.setString("INTN", "AUTO-MATCH");
this.setActive();
this.getData(10000, outputFields, "MDBREADMI", "GetFGLINHU2", record).then(result => {
if (result != null || result.length > 0) {
console.log('runnnnn : ' + Number((result[0].KEY1)));
resolve(Number(result[0].KEY1));
} else {
resolve(null);
this.rootScope.showError("Get Run number data retrieve fail!");
}
});
});
return promise;
}
然后基于此值,例如,最后一行键是650,我需要为表添加其他列(例如,键651,652....。)。每行也包含子行。每个父行的子行数各不相同。因此,我在主for循环内创建了一个for循环。 prepareGLS840Api_AddBatchHead方法生成父行,prepareGLS840Api_AddBatchLine方法为每个父行生成子行。这两种方法,主要功能都是使用Promise.resolve完成的。
以下是为什么我在主函数中调用这两个方法的原因。根据需要打印的行数进行迭代。
else {
console.log('group number : ' + obj.Grouping);
obj.VARIANCE = tot;
this.prepareGLS840Api_AddBatchHead(obj, obj.Grouping, runNumber2);
console.log('runNumber2 : ' + runNumber2);
let line1 = 0;
for (let j of grpd[key]) {
line1 += 1;
this.prepareGLS840Api_AddBatchLine(j, obj.Grouping, line1, runNumber2);
}
this.prepareGLS840MIApi_UpdBatch();
b = b + 1;
POJsonArray.push(obj);
runNumber2 = Number(runNumber2) + 1;
以下是打印父行的方法的一部分。
public async prepareGLS840Api_AddBatchHead(obj, grouping, runNumber2) {
let Company = 788;
let Division = 600;
console.log('Im in prepareGLS840Api_AddBatchHead');
//RequestSearchController.runNumber = await this.triggerAPI_MDBREADMI_GetFGLINHU2(grouping);
//console.log('runNumber :' + RequestSearchController.runNumber);
var value;
Promise.resolve(await this.triggerAPI_MDBREADMI_GetFGLINHU2()).then(res => {
//if (a === 1) {
RequestSearchController.runNumber = runNumber2+1;
//}
在此之后,创建子行的方法的一部分
public async prepareGLS840Api_AddBatchLine(obj, grouping, line, runNumber2) {
let Company = 788;
let Division = 600;
console.log('Im in prepareGLS840Api_AddBatchLine');
var ID;
if (obj.Grouping != null) {
ID = 'GL';
} else {
ID = 'l1';
}
var date = new Date();
var month = date.getMonth() + 1;
var dateD = date.getDate();
var monthM;
var dateDD;
if (month < 10) {
monthM = '0' + month;
} else {
monthM = month;
}
if (dateD < 10) {
dateDD = '0' + dateD;
} else {
dateDD = dateD;
}
var today = date.getFullYear() + '' + monthM + '' + dateDD;
//RequestSearchController.runNumber = await this.triggerAPI_MDBREADMI_GetFGLINHU2(grouping);
//console.log('runNumber :' + RequestSearchController.runNumber);
Promise.resolve(await this.triggerAPI_MDBREADMI_GetFGLINHU2()).then(res => {
RequestSearchController.runNumber = runNumber2;
我的主要问题是,runNumber2选择行的最后一个值。但是在for循环上进行迭代时,出现错误“键值651不存在” 。此错误消息更改时间。我的意思是“键值XXX不存在”。
我认为循环未按需要运行。是因为这些异步调用。我怎样才能解决这个问题。请帮助。