All streams
Search
Write a publication
Pull to refresh
1
0
Send message
И все же иллюзия. И, часто, мы никак не можем это контролировать
Простейший пример «type predicate» www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates. Его невозможно сделать типобезопасным
И таких примеров в TS много(
Статья по ссылке от 2017 года. Тинькофф поднялся с 25 места на 3 за последний год. Хорошо когда кто-то исправляет ошибки
Код можно немного причесать, налегая на замыкания

Часто вижу, как из кода на промисах получают тот же callback hell, и видят спасение в async (а там тоже проблем хватает со случайными блокировками)
Приведу свое решение задачи:


const user = fetchJson('/api/user/self');

const interests = user.then(({id}) => fetchJson(`/api/user/interests?userId=${id}`));

const recommendations = interests.then(
  interests => Promise.all(
    interests.map(i => fetchJson(`/api/recommendations?topic=${i}`))
  )
);

Promise.all([user, interests, recommendations])
  .then(
    ([user, interests, recommendations]) => render(user, interests, recommendations)
  )
  .then(() => console.log('We are done!'));

Избавились и от переменный в замыкании и от проблем с затенением. Разбить эту задачу на функции тоже будет просто.


Получилось чуть менее красиво чем с await, но так у нас нет опасности заблокировать параллельные запросы (хотя в примере их и нет), a Promise поддерживается в большем колличестве сред, чем генераторы/await

Да. Этот пункт глупость. С такой же логикой можно представить, что математики сменят механизм умножения, который так же используется внутри функции. А значит надо сменить его на функцию (в js умножение это оператор) и передавать ее параметром.

Information

Rating
Does not participate
Registered
Activity