连接 ECONNREFUSED 127.0.0.1:443。然后方法在前面的方法执行完成之前执行

connect ECONNREFUSED 127.0.0.1:443. Then method executes before the preceding method completes execution

我正在尝试将项目放入本地 dynamodb。我尝试登录以检查问题出在哪里,其中一个问题是,或者可能是 then 方法在前面的方法完成执行之前正在执行。下面是调用 addCompany method in another class

Controller class 代码

1:来自控制器的 registerCompany() 方法 class

public async registerCompany(data, TableName) : Promise <HttpResponse>{

    return new Promise((resolve, reject) => {
        this.registerCompanyService = new RegisterCompanyService();
        let companydata =   this.registerCompanyService.addCompany(data,TableName).then(result =>{ //then is being executed before the addCompany finishes its execution
            if(!result){
                console.log("All data not provided")
                return reject(this.createBadRequestResponse())
            }
            console.log(`The type of return data is ${typeof result}`)
            resolve();

        });

        if(companydata!=null)
        {
            console.log(`The company data is ------> ${companydata}`)
            return  this.createSuccessResponse(companydata);
        }
        else {
           return this.createInternalServerErrorResponse();
        }
    })
}

2:来自 CompanyService 的 addCompany() 方法 class

public async addCompany(companyData: Company, TableName): Promise < any > {
    this.companyDao = new CompanyDao();
    var params = {
        TableName,
        Item: {
            key1: companyData.key1,
            key2: companyData.key2,
            key3: companyData.key3,
        }
    }

    console.log(`The params stringified before sending to dao are -------> ${JSON.stringify(params)}`);

    this.companyDao.addCompany(params);

}

3:来自 DAO 的 addCompany() 方法 class 将数据插入 DB

public async addCompany(params): Promise < any > {

        console.log(`Inside DAO params-------> ${params.item}`);

        let putItem = new Promise < any > ((resolve, reject) => {

            this.dynamodbClient.put(params, (error, result) => {
                console.log(`Inside put     params --------> ${params.item}`)
                if (error) {
                    console.error(`Unable to add item. Error ---> ${JSON.stringify(error)}`)
                    reject(error);
                } else {
                    console.log(`Added Item -----> ${params.Item}`)
                    resolve(true)
                }
            })
        })

        const result = await putItem;
        console.log(`This is the final result -------->${result}`);
        return result;

public async addCompany(companyData: Company, TableName): Promise < any > {
    this.companyDao = new CompanyDao();
    var params = {
        TableName,
        Item: {
            key1: companyData.key1,
            key2: companyData.key2,
            key3: companyData.key3,
        }
    }

    console.log(`The params stringified before sending to dao are -------> ${JSON.stringify(params)}`);

    //When calling a promise you either return it or wait for its completion using await.
    await this.companyDao.addCompany(params);
    //OR return it
    return this.companyDao.addCompany(params);
}

您实际上是在进行异步调用,但不是将 Promise 从 DAO class 返回到控制器。所以调用方法实际上没有办法知道来自 DAO 的 addCompany 是否已解析。此外,避免使用相同的方法名称,即使它们位于不同的 classes/services.

我不能 100% 确定您的 addCompany(DAO) 方法。祝你好运 ;)