Tenho uma função no frontend que chama uma função no backend, que por sua vez faz uma busca no Amazon DynamoDB e me devolve um objeto contendo alguns dados. No backend, consigo exibir esses dados no console, mas não estou conseguindo passar esses dados de volta para o frontend, para exibi-los numa tabela por exemplo.
Código do Frontend
import {obterListaBeneficios} from 'backend/dynamodb'
$w.onReady(function () {
//TODO: write your page related code here...
});
export function button1_click(event) {
//Add your code for this event here:
obterListaBeneficios().then(function (data) {
console.log(data); // Nada é exibido
})
}
Código do Backend
import AWS from 'aws-sdk';
export function obterListaBeneficios() {
AWS.config.update({
region: "us-east-2",
endpoint: 'dynamodb.us-east-2.amazonaws.com',
accessKeyId: "**********",
secretAccessKey: "***********",
maxRetries: 30
})
var documentClient = new AWS.DynamoDB.DocumentClient();
let params = {
TableName: "Tabela1",
Limit: 10
}
console.log("Obtendo dados do DynamoDB");
documentClient.scan(params, function (err, data) {
if (err) {
console.log(err);
}
console.log(data); // Os dados são exibidos
return data;
});
}
Como faço para meu código do frontend receber esses dados?
Oi @Jamilson Junior
Você teve problemas pois o javascript é assíncrono, use uma Promise como mostro no código:
import AWS from 'aws-sdk'; export function obterListaBeneficios() { AWS.config.update({ region: "us-east-2", endpoint: 'dynamodb.us-east-2.amazonaws.com', accessKeyId: "**********", secretAccessKey: "***********", maxRetries: 30 }) var documentClient = new AWS.DynamoDB.DocumentClient(); let params = { TableName: "Tabela1", Limit: 10 } console.log("Obtendo dados do DynamoDB"); return new Promise((resolve, reject) => { documentClient.scan(params, function (err, data) { if (err) { reject(err); } resolve(data); }); }) }
Espero ter ajudado!