node.js - 为什么承诺不返回?
问题描述
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 存储桶,但承诺不会返回任何内容,有什么可以帮助我的吗
解决方案
new Promise
当 aws-sdk 已经原生支持 Promise 时避免使用,不要将callback
参数传递给返回 Promise 的 an ,并且当您可以使用/时async function
不要使用:then
catch
await
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;
}
推荐阅读
- c# - 如何使用 NUnit 根据来自外部文件的值在运行时动态运行测试方法?
- java - Collectors.averagingInt - 这是一个运行平均值还是将所有以前的数字保留在内存中?
- python - 尝试将烧瓶应用程序部署到heroku,缩放测功机后出现h14错误
- modelica - 具有空时间常数的一阶 Modelica 模型
- jenkins - Jenkins 文件,检查 Globals 变量是否存在
- r - 使用 r 中的 fable 包为 ARIMA “‘滞后’或‘差异’错误的坏值”寻求帮助
- pyspark - 在 pyspark 中随时间窗口删除重复项
- python - 产生随机结果的麻烦
- c++ - 将 Crashpad 与 MacOS Qt 应用程序集成
- javascript - 使用 x 键查找每个对象值并更改值的类型