2015-07-23 2 views
0

То, что я пытаюсь сделать, это «подключить» массив функций вместе с функцией. Таким образом, в массиве функций:функции цепочки с аргументом функции

var functionArray = [functionA, functionB, functionC]; 

functionA(next) должны иметь возможность ссылаться на вызов его аргумента функции next вызвать functionB.

Проблема заключается в том, что я не могу использовать обещания (было бы сделать это намного проще, неудачно), так что я придумал способ, как это:

var functionArray = [functionA, functionB]; 

functionArray.push(functionC.bind(undefined, args)); 

for (var i = functionArray.length - 1; i-- > 0;) { 
    functionArray[i] = functionArray[i].bind(undefined, args, functionArray[i + 1]); 
} 

functionArray[0](); 

Мой вопрос, является ли или не есть лучший способ для выполнения этого, так как вышеупомянутая функция выглядит ужасно хакерской. Может быть, что-то с Array.prototype.reduce?

+1

Не могли бы вы описать проблему, которую вы пытаетесь решить; смысл, для какой проблемы это решение? Почему вы не можете использовать обещания? Я не понимаю, чего вы пытаетесь достичь. – Mathletics

+0

Непонятно, что вы спрашиваете или чего хотите достичь. Является ли результатом функции A аргумент функции B или вызван функцией B из области действия функции A? – webduvet

+0

Предполагается, что функции позволяют асинхронно связывать функции друг с другом, поэтому в конечном итоге я хочу иметь функцию, которая превращает массив в функции, которые могут это сделать; 'function functionA (next) { // dosomething next(); // вызывает функцию B, не переданные значения, просто выполнение } функция functionB (next) { // dosomethingelse next(); // вызывает functionC и т. д. ... } ' –

ответ

1

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

var functionArray = [ 
    { func: yourFunction, args: [1, 2] } 
]; 

for (var i = 0 i < functionArray.length; i++) { 
    var func = functionArray[i].func; 
    var args = functionArray[i].args; 
    func.apply(this, args); 
} 
+0

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

+0

Я на самом деле соглашусь с этим ответом, поскольку использование «apply» в этом случае весьма полезно, учитывая, что я также могу передать следующую функцию в цепочке в качестве аргумента. Благодаря! –

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