Javascript 异步调用顺序问题

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

您好,请帮助解决以下问题。我需要通过api获取表的最后一个id。所以我在我的主方法中使用了以下代码。所以我的主方法是异步方法

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已添加