На прошлой неделе я в одиночку пробежал спринт по прозвищу Callback Hell. Это был самый запоминающийся спринт для меня. В этом спринте было сделано несколько важных выводов. Лично самой большой была идея обернуть обратные вызовы внутри обратных вызовов. Во время спринта упаковка обратных вызовов стала немного чрезмерной, отсюда и название «ад обратных вызовов».

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

Ниже приведен небольшой пример переноса обратного вызова, представьте, что последний обратный вызов является синхронным вызовом, а другие функции — асинхронными вызовами. Наслаждаться!

var getTotal = function(thingOne, thingTwo, callback {
  let thingCou1 = getCount(filePathOne, (err, result1) => {
   if (err) {
    callback(err, null);
    return;
   }
   let thingCou2 = getCount(anotherThingOne, (err, result2) => {
    if (err) {
     callback(err, null);
     return;
    }
    callback(null, thingCou1 + thingCou2);
   });
  });
};