Давайте предположим, что у меня есть следующий код:Как избежать этого шаблона «возможного обратного вызова»?
var foo = function(arg, continuation, behavior) {
if (arg > 1) {
// Do some work with arg, for example send a paged API request.
console.log("foo: " + arg--);
continuation(arg, continuation, behavior);
} else {
behavior(arg);
}
},
bar = function(arg, continuation, behavior) {
if (arg > 2) {
// Do some other work with arg.
console.log("bar: " + arg--);
bar(arg, continuation, behavior);
} else {
continuation(arg, continuation, behavior);
}
};
bar(3, foo, console.log);
Идея заключается в том, что я хочу, чтобы указать в вызове bar
, какая функция в конечном итоге будет обратного вызова foo
, который будет называться спустя некоторое время в граф вызовов.
Например, я не мог бы хотеть, чтобы console.log
окончательного значения arg
, но и использовать его как число раз повторяются некоторое сообщение:
var baz = function(arg) {
for (var i = 0; i < arg; i++) {
console.log("baz");
}
};
bar(4, foo, baz);
В данном случае я говорю, что я инъекционный поведение baz
вместо поведения console.log
.
В some code I wrote Я использую этот шаблон, чтобы ввести поведение, которое я хочу. Например, cli.js
вводит поведение печати некоторых записей на консоль, в то время как другой файл db.js
(еще не написанный) может вводить поведение добавления этих записей в базу данных и т. Д.
Я не уверен, что это лучший способ добиться того, чего я хочу. Есть ли лучший способ сделать это?
Я не понимаю, о чем вы просите. Ваши функции не возвращают никаких значений. Следовательно, я предполагаю, что вы используете их только для побочных эффектов. Функция 'foo' вообще не использует аргумент' продолжения'. Рекурсия в ваших функциях может быть преобразована в итерационные циклы. Еще лучше, просто установите 'if (arg> 2) arg = 2' в' bar' и 'if (arg> 1) arg = 1' в' foo'. Вам вообще не нужны петли. Я понятия не имею, что вы подразумеваете под инъекционным поведением. Все сказанное, вам нужно четко указать вашу проблему. Возможно, это проблема [xy] (http://ow.ly/LqxUq). –
Мм, возможно, мое сокращение было недостаточно ясным. Я использую 'arg -' в качестве замены для выполнения некоторой работы с 'arg'. Например, подумайте о отправке запрошенного запроса API с помощью '{page: arg}'. –
@AaditMShah Я отредактировал. Возможно, это имеет смысл? –