[Resolvido] Sincronização chamada de comando

Participei do bootcamp em SP é uma questão apareceu durante o desenvolvimento usa o SDK JS. Dentro do message receiver eu fiz a chamada de método para ler e outra para gravar o status no bucket, mas como a chamada retorna um promise até eu receber o retorno no then a function do receiver já terminou sua execução daí eu não consigo consultar o bucket em tempo para tratar a resposta. A ideia seria sincronizar a chamada, mas a function passada como parâmetro para o message receiver não aceita async, pois se aceitasse permitiria o uso do await. Rafael começou a analisar a questão comigo mas como o curso estava correndo não foi possível dá continuidade.

Então de forma resumida meu problema é conseguir o retorno da consulta do bucket dentro do message receiver antes de sair dele, ou sincronizando a chamada ou de outra maneira alguém passou por isso é poderia me ajudar?

Consegui resolver !!!

client.addMessageReceiver(function () {
return true; //message.content == ‘Sim’;
}, async function (message) {

//var st = await getValue();

await client.sendCommand({
‘id’: ‘3’,
‘method’: ‘set’,
‘uri’: ‘/buckets/xxx111’,
‘type’: ‘application/json’,
‘resource’: {
‘key1’: ‘value1’,
‘key2’: 2,
‘key3’: [
‘3a’, ‘3b’, ‘3c’
]
}
});

await client.sendCommand({
‘id’: ‘3’,
‘method’: ‘get’,
‘uri’: ‘/buckets/xxx111’
}).then(function (commandResponse) {
var teste = commandResponse;
console.log(commandResponse);
})

Olá @Francisco_Freitas, que bom que vc conseguiu resolver.

Apenas para deixar registrado para todas as pessoas:

Para que seja possível chamar uma função assíncrona dentro da função handler de um receiver utilize o operador async.

client.addMessageReceiver((m) => true, async function (message) {

  // aqui vão as chamadas assíncronas utilizando `await. Exemplo:
  // await client.sendCommand(...);

});

1 Curtida