Есть ли современный подход к вызову функций, который поддерживает как синхронный, так и асинхронный режимы выполнения в Javascript?

Делаю программу на javascript с API. Прямо сейчас этот API работает с обратными вызовами и поддерживает как синхронные, так и асинхронные модели выполнения.

Пример вызова API:

API.getInfo((err, info) => {
    if (err) return processError(err);
    doSomethingUseful(info);
})

У меня есть два исполнителя API - локальный и удаленный.

Пример локального исполнителя:

state.info = {...};
API.getInfo = (cb) => cb(null, clone(state.info));

Пример удаленного исполнителя:

API.getInfo = (cb) => doGet('/info').then(info => cb(null, info), cb)
// express transforms this query to local executor and returns answer

Хитрость в том, что API может называть себя так:

API.getOtherInfo = (cb) => {
    let part1, part2;
    API.getPart1((err, data) => part1 = data);
    API.getPart2((err, data) => part2 = data);
    cb(null, {part1, part2})
}

В данном случае это синхронизация, и я хочу, чтобы она синхронизировалась.

Обратные вызовы могут поддерживать как синхронный, так и асинхронный режимы выполнения.

Итак, теперь я хочу использовать современный javascript, но, к сожалению, обещания асинхронны по определению. Есть ли современный подход javascript для синхронизации и асинхронного выполнения, кроме обратных вызовов?

Используйте async () для преобразования синхронизированной функции в асинхронизированную функцию, я думаю, вы ищете эту опцию

Osama 24.10.2018 00:16

Обычный дизайн конечной точки API, которая иногда может быть синхронизированной, а иногда и асинхронной, заключается в том, чтобы внешний API всегда был асинхронным. Затем вызывающая сторона выполняет один асинхронный дизайн, который всегда работает (независимо от того, синхронны ли внутренние компоненты или нет). Обещания отлично подходят для этого, потому что они помогают сделать его всегда асинхронным.

jfriend00 24.10.2018 03:33

@ jfriend00, так что единственный вариант - сделать обертку обещаний вокруг ядра синхронизации?

NtsDK 24.10.2018 12:53

Я не знаю, что вы подразумеваете под оберткой обещаний вокруг ядра синхронизации. Если у вас есть синхронное значение, которое вы хотите вернуть асинхронно, то вместо return value используйте return Promise.resolve(value).

jfriend00 25.10.2018 03:11
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
48
0

Другие вопросы по теме