0

我是 NodeJS 的新手,目前面临以下情况。

router.post('/create', (req, res, next)=>{

    var requestBucketParams = {
        Bucket: req.body.bucket
    }

    var deliveryBucketParams = {
        Bucket: "delivery-" + req.body.bucket
    }

    var isBucketCreationSuccess = false;

    // setBucketCreationSuccessCallback(setBucketCreationSuccess);

    // Create Bucket and Delivery Bucket
    s3.createBucket(requestBucketParams, (err, data)=>{
        if (err) {
            console.log("error ", err);
            res.send({
                message: "error while creating the bucket",
                description: err.message
            });
        } else {
            console.log("Success", data.Location);
            s3.createBucket(deliveryBucketParams, (err, data)=>{
                if (err) {
                    console.log("Error", err);
                    res.send({
                        message: "error while creating the bucket",
                        description: err.message
                    });
                } else {
                    isBucketCreationSuccess = true;                    
                    console.log("Success", data.Location);
                }
            })
        }
    });

    if(isBucketCreationSuccess){
        Bucket.create({
            bucketId: uuidv4(),
            name: req.body.bucket,
            bucket_url: "http://" + req.body.bucket + ".s3.amazonaws.com",
            delivery_bucket_url: "http://delivery-" + req.body.bucket + ".s3.amazonaws.com"
        }).then(bucket=>{
            res.send({
                url: "http://" + req.body.bucket + ".s3.amazonaws.com",
                delivery_url: "http://delivery-" + req.body.bucket + ".s3.amazonaws.com"
            })
        }).catch(err=>{
            res.send({
                message: err.message
            })
        })
    }else{
        res.send({
            message: "Database record creation failed"
        })
    }

});

虽然我想添加一条记录,但似乎isBucketCreationSuccess没有在 aws-sdk 的第二个 createBucket 函数中设置变量。

我知道这可以通过回调来解决,但是谁能告诉我如何在这里使用它?

4

1 回答 1

0

您遇到此问题的原因是由于 javascript 的异步性质。出于这个原因,我使用 async & await 而不是回调,即您的代码可以重写为(简单示例,但更容易阅读)

var AWS = require("aws-sdk");
var s3 = new AWS.S3();

var params1 = {
    Bucket: "david",
    CreateBucketConfiguration: {
        LocationConstraint: "eu-west-1"
    }
};

var params2 = {
    Bucket: "dwetestbucketilikesloths2",
    CreateBucketConfiguration: {
        LocationConstraint: "eu-west-1"
    }
};

var isBucketCreationSuccess = false;

try {
    var createBucket1 = await s3.createBucket(params1).promise()
    var createBucket2 = await s3.createBucket(params2).promise()
    isBucketCreationSuccess = true;
} catch (err) {
    console.log(err)
}
于 2021-04-03T16:33:27.557 回答