Uso de Node AWS SDK que admite devoluciones de llamadas y promesas. https://aws.amazon.com/blogs/developer/support-for-promises-in-the-sdk/
Usando q como biblioteca de promesas.. AWS.config.setPromisesDependency(q);
const headObjProm = this.s3Client.headObject(headParams).promise();
headObjProm .then(ret => { //ret is promise.. }) consola registrando ret muestra..
(resolve, reject) { self.on('complete', function(resp) { if (resp.error) { reject(resp.error); } else { resolve(resp.data); } }); ¿Tenía la impresión de que ret sería un mensaje de error o de datos? Toda la documentación en AWS se realiza en estilo de devolución de llamada. ¿Cómo usar esto con promesas?
Cuando esté inicializando el paquete Q como Promise a usar, debe especificar la propiedad Promise de Q .
AWS.config.setPromisesDependency(require('Q').Promise);
Dado que const headObjProm = this.s3Client.headObject(headParams).promise(); es asíncrono, ¿qué tal si dices que tienes esto en una función asíncrona y usas await así:
`const resolveHeadObject = async()=> await s3Client.headObject(headParams).promise()` Uso la sintaxis await/async y funciona para mí.
No olvides agregar .Promise a tu requisito Q también, si es necesario.