2015-11-16 11 views
0

У меня есть код ниже, чтобы получить result от func1, используя callback1. Но func1 использует func2 с callback2 и затем зависит от этого второго обратного вызова либо возвращает result, либо используя func3 с callback3, чтобы получить result. Не знаете, где поставить другой обратный вызов, чтобы получить один result.упрощение вложенных обратных вызовов

module1.func1(arg1, function (callback1) { 
    module1.func2(arg2, function (callback2) { 
     if (result2) result = result2; 
     else 
     module2.func3 (arg3, function (callback3) { 
      result = result3; 
     }) 
    }) 
}); 

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

module.exports = function (callback) { 
    module1.func1(arg1, function (callback1) { 
     module1.func2(arg2, function (callback2) { 
      if (result2) result = result2; 
      else 
       module2.func3 (arg3, function (callback3) { 
        result = result3; 
        callback(result) //??? 
       }) 
     }) 
    }); 
}; 

ответ

2

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

https://github.com/mattdesl/promise-cookbook

Promisses доступны в ES6, но и несколько библиотек. Надеюсь, это даст вам представление о том, что нужно искать.

Смежные вопросы