Я изучаю JavaScript - действительно изучаю JavaScript. Я исхожу из фона PHP, поэтому некоторые концепции JavaScript по-прежнему новы для меня, особенно асинхронное программирование. На этот вопрос уже можно было ответить много раз, но я не смог найти ответ. Возможно, потому, что я даже не знаю, как задать вопрос, кроме как показать пример. Итак, вот оно:
При использовании отложенного пакета от npm я вижу следующий пример:
delayedAdd(2, 3)(function (result) {
return result * result
})(function (result) {
console.log(result); // 25
});
Они ссылаются на это как на цепочку, и это действительно работает, поскольку я в настоящее время использую этот код, чтобы проверить, когда обещание разрешено или отклонено. Несмотря на то, что они называют это цепочкой, это напоминает мне о закрытии закрытий, как в Swift.
Я действительно не понимаю, какой тип цепочки это, так как у нас есть вызов функции, а затем сразу после, анонимная функция, заключенная в круглые скобки.
Итак, у меня есть два вопроса.
- Что это за шаблон?
- Как это работает? Это может быть загруженный вопрос, но мне нравится знать, как что-то работает, когда кто-то спрашивает меня об этом, я могу дать им подробное объяснение.
Вот функция delayedAdd:
var delayedAdd = delay(function (a, b) {
return a + b;
}, 100);
который использует следующую функцию:
var delay = function (fn, timeout) {
return function () {
var def = deferred(), self = this, args = arguments;
setTimeout(function () {
var value;
try {
value = fn.apply(self, args));
} catch (e) {
def.reject(e);
return;
}
def.resolve(value);
}, timeout);
return def.promise;
};
};