С этими строками
for(var i = 0; i < fruits.length; i++) {
fruitFuncs[i] = makeFruitPie(fruits[i])
}
вы уже запустите функции и, следовательно, начнется их обработка.
Предполагая, что вы хотите выполнить функции в последовательности, следующее будет более уместно:
// construct the pipeline
const start = Q.defer();
let result = start.promise; // we need something to set the pipeline off
fruits.forEach( (fruit) => {
result = result.then( () => makeFruitPie( fruit ) );
});
// start the pipeline
start.resolve();
Sidenote: есть собственная реализация Promise
, поддерживаемая почти во всех средах . Возможно, стоит подумать о переходе с поддерживаемой библиотекой версии.