Node.js async calls do not run in sequence

Viewed 20

I am completely new to node js . I am trying to code below steps:

  1. Download a file from AWS S3 folder
  2. Then upload it to some other AWS s3 folder. So I have searched online and created similar code in node js . The below code is for the same . What I see here is the downloadFile and uploadFile functions run in parallel and uploadFile runs first, it seems.

How to run them in sequence?

const aws = require('aws-sdk');
    var s3 = new aws.S3();
    var fs = require('fs');
    // TODO implement
    var params = {   Bucket: "buckets3",   Key: "input_pdf_img/Gas_bill_sample.pdf" };
    const filename = 'Gas_bill_sample.pdf';
    const bucketName = "translation-bucket-qa-v1";
    const key = "input_pdf_img/Gas_bill_sample.pdf";
        const key2 = "output_pdf2docx_img/"+filename;
    //console.log(filename);
    const tmp_filename = "/tmp/Gas_bill_sample.pdf";
    console.log(filename);

    const downloadFile = (tmp_filename, bucketName, key) => {
        const params2 = {
                Bucket: bucketName,
                Key: key
                };
        s3.getObject(params, (err, data) => {
                if (err) console.error(err);
                        fs.writeFileSync(tmp_filename, data.Body.toString());
                        //console.log(`${filePath} has been created!`);
                        });
                        };

        //downloadFile(tmp_filename, bucketName, key);
    //console.log('download done');
    //await sleep(1000);
    //upload
        
    const uploadFile = (tmp_filename) => {
    // Read content from the file
    const fileContent = fs.readFileSync(tmp_filename);

    // Setting up S3 upload parameters
    const params2 = {
        Bucket: bucketName,
        Key: key2, // File name you want to save as in S3
        Body: fileContent
    };

    // Uploading files to the bucket
    s3.upload(params2, function(err, data) {
        if (err) {
            throw err;
        }
        console.log(`File uploaded successfully. ${data.Location}`);
    });
};
downloadFile(tmp_filename, bucketName, key);
console.log('download done');
//setTimeout(() => {console.log("Let the download finish")}, 6000);
uploadFile(tmp_filename);

//setTimeout(() => {console.log("Let the download finish")}, 6000);const aws = require('aws-sdk');
    var s3 = new aws.S3();
    var fs = require('fs');
    // TODO implement
    var params = {   Bucket: "buckets3",   Key: "input_pdf_img/Gas_bill_sample.pdf" };
    const filename = 'Gas_bill_sample.pdf';
    const bucketName = "translation-bucket-qa-v1";
    const key = "input_pdf_img/Gas_bill_sample.pdf";
        const key2 = "output_pdf2docx_img/"+filename;
    //console.log(filename);
    const tmp_filename = "/tmp/Gas_bill_sample.pdf";
    console.log(filename);

    const downloadFile = (tmp_filename, bucketName, key) => {
        const params2 = {
                Bucket: bucketName,
                Key: key
                };
        s3.getObject(params, (err, data) => {
                if (err) console.error(err);
                        fs.writeFileSync(tmp_filename, data.Body.toString());
                        //console.log(`${filePath} has been created!`);
                        });
                        };

        //downloadFile(tmp_filename, bucketName, key);
    //console.log('download done');
    //await sleep(1000);
    //upload
        
    const uploadFile = (tmp_filename) => {
    // Read content from the file
    const fileContent = fs.readFileSync(tmp_filename);

    // Setting up S3 upload parameters
    const params2 = {
        Bucket: bucketName,
        Key: key2, // File name you want to save as in S3
        Body: fileContent
    };

    // Uploading files to the bucket
    s3.upload(params2, function(err, data) {
        if (err) {
            throw err;
        }
        console.log(`File uploaded successfully. ${data.Location}`);
    });
};
downloadFile(tmp_filename, bucketName, key);
console.log('download done');
//setTimeout(() => {console.log("Let the download finish")}, 6000);
uploadFile(tmp_filename);

//setTimeout(() => {console.log("Let the download finish")}, 6000);

Tried time out and other ways but no help. Since the const runs in parallel error is "No such file or directory" as the download file runs after uploadFile.

0 Answers
Related