- Notifications
You must be signed in to change notification settings - Fork 21
Open
Description
Всем привет. Не знаю, правильно ли понял задачу. Может будут кейсы у вас.
const api = { a: { b: { m: 1, c: callback => setTimeout(() => callback(null, 'hello'), 100) } }, aa: { bb: (callback, x, y) => setTimeout(() => callback(null, x + y), 200) } }; const handler = { get(t, p) { // Проверяю, есть ли какие-то данные по prop if (t[p]) { if (typeof t[p] === "object") { return new Proxy(t[p], handler) // верну новую проксю, которая будет содержать такие же handler } if (typeof t[p] === "function") { return (...args) => new Promise((r, e) => { // Забираю аргументы, их может быть множество const callb = (error, data) => { error ? e(error) : r(data); // тут получаю есть ли ошибка или всё хорошо } t[p](callb, ...args) // вызываю функцию с объекта. } ); } return t[p]; } return undefined; }, }; function promisify(api) { return new Proxy(api, handler) } const promisedApi = promisify(api); promisedApi.a.b.c() .then(res => console.log(res)); // => ’hello’ promisedApi.aa.bb(1, 2) .then(res => console.log(res)); console.log(promisedApi.a.b.m) Какая тут логика.
Из объекта я делаю проксю (Это нужно чтобы решить пункт с тем, что апишка должна быть пасивной)
Далее если я получаю из объекта другой объект. Я даю ему хендлеры прокси и возвращаю новую проксю.
Если же я получил, что сейчас у меня функция, я возвращаю функцию с промимом. Жду от неё ответ и отправляю данные. Если это константа, тогда просто возвращаю константу
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels