Я делаю программу на 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 для синхронизации и асинхронного выполнения, кроме обратных вызовов?