首页 > 解决方案 > 为什么承诺不返回?

问题描述

exports.FilelamdaFunctionHandler =async function( event, context, callback){
    try {
        
        let p = new Promise(function(resolve,reject){            
        let contentType = event.headers['Content-Type']
        console.log('content type is--' + contentType)
        contentType = contentType.split("/")[1]
        let type = (contentType == 'plain') ? ".txt" : ".csv"
        const params = {
            Body: event.body,
            Bucket: bucketName + "/" + event.pathParameters.hospital,
            Key: event.pathParameters.hospital + type,
            ContentType: "*"
        };
        try {
            s3.putObject(params, (err, results) => {
                if (err) {
                    console.log('errors in promise' + err)
                    reject(err)
                }
                else {                   
                    console.log('resultss --' + JSON.stringify(results))
                    resolve(results)
                }
            })    
        } catch (error) {
            console.log('e--' + error.toString())
            console.log('errorororooror' + JSON.stringify(error))
        }       
        
            
        });
        console.log('second')
        p.then((result)=>{
            const response={
                'statusCode':200,
                'body':"sucess"
            }
            callback(null,response)
        }).catch((error)=>{
            const response={
                'statusCode':500,
                'body':"error"
            }
            callback(null,response)
        })


    } catch (e) {
        console.log('e--' + e.toString())
        console.log('errr' + JSON.stringify(e))
    }
}

我正在使用承诺将数据上传到 s3 存储桶,但承诺不会返回任何内容,有什么可以帮助我的吗

标签: node.jsaws-lambda

解决方案


new Promise当 aws-sdk 已经原生支持 Promise 时避免使用,不要将callback参数传递给返回 Promise 的 an ,并且当您可以使用/时async function不要使用:thencatchawait

exports.FilelamdaFunctionHandler = async function(event, context){
    try {        
        let contentType = event.headers['Content-Type']
        console.log('content type is--' + contentType)
        contentType = contentType.split("/")[1]
        let type = (contentType == 'plain') ? ".txt" : ".csv"
        const params = {
            Body: event.body,
            Bucket: bucketName + "/" + event.pathParameters.hospital,
            Key: event.pathParameters.hospital + type,
            ContentType: "*"
        };
        const results = await s3.putObject(params).promise();
        console.log('resultss --' + JSON.stringify(results);
    } catch(error) {
        console.log('errors in promise' + error)
        console.log('e--' + error.toString())
        console.log('errorororooror' + JSON.stringify(error));
        const response = {
            'statusCode':500,
            'body':"error"
        }
        return response;
    }       
    
    console.log('second')
    const response = {
        'statusCode':200,
        'body':"sucess"
    }
    return response;
}

推荐阅读