Я пытаюсь реализовать интеграцию Websocket с AWS API Gateway, и у меня возникает проблема, когда сообщения отправляются только после того, как сообщение отправлено впоследствии.Это происходит только тогда, когда я пытаюсь отправить сообщения на 2 или более соединений.
Они создаются как лямбды.
// Used in both examples
const client = new AWS.ApiGatewayManagementApi({
apiVersion: '2018-11-29',
endpoint: `https://${event.requestContext.domainName}/${event.requestContext.stage}`
});
try {
await client
.postToConnection({
ConnectionId: event.requestContext.connectionId,
Data: JSON.stringify({
ConnectionId: event.requestContext.connectionId,
body: event.body
})
})
.promise();
} catch (err) {
console.log(err)
}
Когда я тестирую его с помощью wscat -c CONNECTION_URL
иотправьте тело с увеличивающимися цифрами, первый пример работает как ожидалось.Вывод:
> 1
< {"ConnectionId":"AV0G4fZ8joECG1g=","body":"1"}
> 2
< {"ConnectionId":"AV0G4fZ8joECG1g=","body":"2"}
> 3
< {"ConnectionId":"AV0G4fZ8joECG1g=","body":"3"}
> 4
< {"ConnectionId":"AV0G4fZ8joECG1g=","body":"4"}
> 5
< {"ConnectionId":"AV0G4fZ8joECG1g=","body":"5"}
Когда я включаю массив ConnectionIds, сопоставляю его с возвращаемым списком Promises и вызываю Promise.all [], вывод теперь на 1 позади текущего сообщения.WEIRD!
const results = [{ ConnectionId: 'AVzF9fbIDoECF-w=' }, { ConnectionId: 'AuUasddd-DoECJ-Q=' }]
const sendMessages = results.map(async ({ ConnectionId }) => {
try {
await client
.postToConnection({
ConnectionId,
Data: JSON.stringify({
ConnectionId: ConnectionId,
body: event.body
})
})
.promise();
} catch (err) {
console.log(err)
}
})
try {
await Promise.all[sendMessages]
} catch (err) {
console.log(err)
}
Когда я делаю то же самое с инкрементными значениями, все сообщения отстают от последних на 1.Вывод:
> 1
> 2
< {"ConnectionId":"AVzF9fbIDoECF-w=","body":"1"}
> 3
< {"ConnectionId":"AVzF9fbIDoECF-w=","body":"2"}
> 4
< {"ConnectionId":"AVzF9fbIDoECF-w=","body":"3"}
> 5
< {"ConnectionId":"AVzF9fbIDoECF-w=","body":"4"}
Буду признателен за любую помощь специалиста или идеи о том, что может пойти не так