处理多个异步调用的结果,并在收集结果后调用数据库

时间:2018-12-11 11:08:55

标签: node.js typescript aws-sdk

伙计们,我是Node js的新手,我正在尝试执行以下步骤

1)调用AWS API通过传递数据来创建Cognito用户。 2)当所有请求都将完成时,我会将所有记录插入数据库中。

3)user是所有用户的数组。

这是我所做的

const obj = new ReadCsvFile();
obj.readCSVFromAWS()
    .then(result => {
        const user = obj.getMigratedList();
        for (const i in user) {
            if (user[i] !== null && user[i] !== undefined) {
                const uuid = obj.createUserInCognito(user[i]);
                uuid.then(userAttribute => {
                    user[i].uuid = String(userAttribute.User.Attributes.values); //should complete all the request 
                });
            }
        }
    })
    .catch(err => {
        console.log(err);
    });


public async createUserInCognito(data: User) {
        const CognitoIdentityServiceProvider = AWS.CognitoIdentityServiceProvider;
        const client = new CognitoIdentityServiceProvider({ apiVersion: "2016-04-19" });
        const params = {
            UserPoolId: "us-east-2_lleSjp1bN" /* required */,
            Username: data.email /* required */,
            DesiredDeliveryMediums: ["EMAIL"],
            ForceAliasCreation: false,
            // email_verified: true,
            // MessageAction: "SUPPRESS",
            TemporaryPassword: data.password,
            UserAttributes: [
                {
                    Name: "email" /* required */,
                    Value: data.email
                }
            ]
        };
        return await client.adminCreateUser(params).promise();
    }

问题

1)我希望所有请求都应由Cognito用户完成。

2)然后,我需要将用户列表传递到数据库中。

3)我想知道如何等待完成所有请求,然后将其插入数据库。

请帮助。

1 个答案:

答案 0 :(得分:1)

使用下面编写的代码段:

const obj = new ReadCsvFile();
obj.readCSVFromAWS()
    .then(result => {
        const user = obj.getMigratedList();
        for (const i in user) {
            if (user[i] !== null && user[i] !== undefined) {
                obj.createUserInCognito(user[i]).then(uuid=>{
                    uuid.then(userAttribute => {
                        user[i].uuid = String(userAttribute.User.Attributes.values); //should complete all the request 
                    });
                });

            }
        }
    })
    .catch(err => {
        console.log(err);
    });