Давайте рассмотрим распространенный шаблон многократного использования для преобразования API, управляемого событиями, в ориентированный на задачи async / await.
В качестве примера мы можем использовать WebSockets. WebSockets просты и удобны.
Должно быть прямолинейно. Но что, если бы нам пришлось взаимодействовать с протоколом, который не так прост?
Давайте представим фиктивный, вежливый и силлогистический протокол, в котором клиенту необходимо сообщить серверу свое мнение о погоде:
Довольно сложно. Писать реализацию в WebSockets с обычными прослушивателями событий довольно неуклюже. Какая у нас есть лучшая альтернатива?
Ответ - async / await.
Было бы неплохо написать такой код:
Вместо того:
Ход программы немного менее очевиден. Если мы добавим больше сложности к протоколу (больше погодных условий, больше логических путей), то слушатель событий станет более сложным.
Как мы можем улучшить API WebSocket? Мы можем написать ожидающий connect ():
Теперь каждое сообщение ставится в очередь в ожидании вызова метода receive ().
Следующее, что нужно сделать, это реализовать receive ():
Были сделаны! Мы готовы ждать этих вызовов функций, сколько захотим.
Моя небольшая библиотека WebSocket-async доступна:
Unpkg: https://unpkg.com/websocket-async
Npm: https://www.npmjs.com/package/websocket-async
Добро пожаловать на Github!