Javascript 异步调用顺序问题
您好,请帮助解决以下问题。我需要通过api获取表的最后一个id。所以我在我的主方法中使用了以下代码。所以我的主方法是异步方法Javascript 异步调用顺序问题,javascript,typescript,api,asynchronous,Javascript,Typescript,Api,Asynchronous,您好,请帮助解决以下问题。我需要通过api获取表的最后一个id。所以我在我的主方法中使用了以下代码。所以我的主方法是异步方法 var runNumber2 = await this.triggerAPI_MDBREADMI_GetFGLINHU2(); 下面是triggerAPI_MDBREADMI_GetFGLINHU2方法 /** * Trigger API - MDBREADMI_GetFGLINHU2 */ public triggerA
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,我需要为表添加其他列(例如,使用键651652…)。每一行也包含子行。每个父行的子行数各不相同。因此,我在主for循环中创建了一个for循环。prepareGLS840Api_AddBatchHead方法生成父行,prepareGLS840Api_AddBatchLine方法为每个父行生成子行。这两种方法的主要功能都是使用Promise.resolve完成的
下面是我在main函数中调用这两个方法的原因。它根据需要打印的行数进行迭代
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;
public async prepareGLS840Api\u AddBatchLine(obj,分组,行,runNumber2){
让公司=788;
设除法=600;
log('prepareGLS840Api_AddBatchLine中的Im');
变量ID;
if(obj.Grouping!=null){
ID='GL';
}否则{
ID='l1';
}
变量日期=新日期();
var month=date.getMonth()+1;
var dateD=date.getDate();
var monthM;
var dateDD;
如果(月<10){
月=0+月;
}否则{
月=月;
}
如果(日期<10){
dateDD='0'+日期;
}否则{
dateDD=日期;
}
var today=date.getFullYear()+“”+monthM+“”+dateDD;
//RequestSearchController.runNumber=等待这个。triggerAPI\u mdbreadmin\u GetFGLINHU2(分组);
//log('runNumber:'+RequestSearchController.runNumber);
Promise.resolve(等待这个.triggerAPI\u mdbreadmin\u GetFGLINHU2())。然后(res=>{
RequestSearchController.runNumber=runNumber2;
我的主要问题是,runNumber2选择行的最后一个值。但是当在for循环中迭代它时,我得到了错误“Key value 651不存在”
。此错误消息会不时更改。我的意思是“键值XXX不存在”
我认为循环没有按我需要的方式运行。是否是因为这些异步调用。我如何修复此问题。请提供帮助。
Promise.resolve(等待此消息。triggerAPI\u MDBREADMI\u GetFGLINHU2())
huh?-您没有显示triggerAPI\u MDBREADMI\u GetFGLINHU2函数,因此它可能写错了。请查看我的更新问题。triggerAPI\u MDBREADMI\u GetFGLINHU2已添加Promise.resolve(等待这个。triggerAPI\u MDBREADMI\u GetFGLINHU2())
嗯?-您没有显示triggerAPI\u MDBREADMI\u GetFGLINHU2函数,因此它可能写错了。请查看我的更新问题。triggerAPI\u MDBREADMI\u GetFGLINHU2已添加