0

Всем привет! Подскажите, пожалуйста, как можно получить данные из асинхронной функции с помощью callback Без использования обещаний и async/await.

function getItem(item, callback) {
    setTimeout(() => callback(item), 1000);
}</code></pre>

2 Answers2

1

Используя события. Создаем событие event, в коллбаке при получении значения диспатчим его eventDispatch и ловим его там где вам нужно с помощью addEventListener

  • Спасибо, но тоже нельзя использовать события. Использовать можно только callback – Anahara Jul 19 '20 at 06:38
1

Обычно говорят, что асинхронность «заразна» — если уж вы используете асинхронный код, любые данные из него придётся и дальше использовать асинхронно. Синхронный и асинхронный код — как две параллельные прямые, как два разных мира, они не пересекаются. Попытка вернуть данные из асинхронного кода в синхронный — это как вернуть значение в прошлое.

Есть несколько способов работать с асинхронным кодом, и почти все основные вы забраковали — Promise (в том числе в виде async/await) и события. Так что остаётся только цепочка колбеков: значение, которые вы получаете в колбеке, и использовать нужно в колбеке, то есть переносите весь дальнейший код в колбек или вызывайте функции из колбека.

Подробнее можно почитать, например, в ответах к этому традиционно упоминаемому вопросу: Как вернуть значение из события или из функции обратного вызова? Или хотя бы дождаться их окончания

Или из английского раздела: https://stackoverflow.com/questions/14220321/

vsemozhebuty
  • 14,042