异步呼叫订单问题

时间:2019-09-24 03:11:22

标签: javascript typescript api asynchronous

您好,请帮助解决以下问题。我需要通过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不存在”。

我认为循环未按需要运行。是因为这些异步调用。我怎样才能解决这个问题。请帮助。

0 个答案:

没有答案