Estoy tratando de invocar una función Lambda y devolver una Promesa al finalizar,
pero me sale el siguiente error:
"createUser(...).entonces no es una función"
const createUser = (phone) => { return lambda.invoke({ FunctionName: 'createUser', Payload: JSON.stringify({"phone": phone}) }, (err, data) => { let payload = JSON.parse(data.Payload); if (payload.statusCode != 200) { Promise.reject(payload); } Promise.resolve(payload); }) } createUser('') .then(res => console.log(res)) .catch(err => console.log(err))Ya intenté declarar una nueva Promesa usando el
let promise = new Promise((resolve, reject) => {...})pero eso tampoco funcionó...
aws-sdk admite promesas a través de una propiedad promise() en el objeto devuelto por la mayoría de los métodos de la API, así:
const createUser = (phone) => { return lambda.invoke({ FunctionName: 'createUser', Payload: JSON.stringify({"phone": phone}) }).promise(); } createUser('555...') .then(res => console.log) .catch(err => console.log);https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/using-promises.html
Bien, lo descubrí...
No he devuelto la promesa correctamente.
para corregir el error, declaré lambda.invoke dentro de una nueva Promesa, y luego devolví la Promesa de esta manera:
const createUser = (phone) => { let promise = new Promise((resolve, reject) => { lambda.invoke({ FunctionName: 'createUser', Payload: JSON.stringify({"phone": phone}) }, (err, data) => { let payload = JSON.parse(data.Payload); if (payload.statusCode != 200) { reject(payload); } else { resolve(payload); } }) }) return promise; }