2014-11-20 4 views
1

Вдохновленный this article on curry functions Я пытался связать их и придумал это решение. Я не уверен в микшинге, хотя, поскольку я как-то чувствую, что lodash может иметь такую ​​функцию allready. Если да, то что называется этой функцией?функции цепного карри с lodash

var _ = require('lodash'); 

var get = _.curry(function(property, object) {return object[property]}); 

var map = _.curry(function(fn, objects){ return objects.map(fn) }); 

var json = { 
    "user": "hughfdjackson", 
    "posts": [ 
     { "title": "why curry?", "contents": "..." }, 
     { "title": "prototypes: the short(est possible) story", "contents": "..." } 
    ] 
} 

_.mixin({ 
    then:function(input, fn) {return fn(input);} 
}); 

_(json) 
    .then(get('posts')) 
    .then(map(get('title'))) 
    .tap(console.log) 
+1

Нет, в lodash нет такой функции. Lodash не думает о себе как обертке, которая может быть сопоставлена, но как простые значения. – Bergi

+0

@ Bergi: '_ ([1, 2, 3]; // => {__chain__: false, __wrapped__: [1, 2, 3]} '. Поэтому, если 'console.log' были заменены на' console.log.bind (console) ', это будет просто работать, регистрировать заголовки сообщений и возвращать обертку LoDash. –

+0

@ScottSauyet: Да, это сработает. Я говорю, что нет «родной» альтернативы 'then' – Bergi

ответ

2

В (отлично!) Статьи Хью Джексона, в then функции, предположительно, будет приходить из библиотеки Promise, вероятно, привязанной к вызову AJAX. Поэтому вам не нужно будет делать это самостоятельно, если вы начинаете там. Смешивание его в _, как будто кажется странным.

Lo-Dash and Underscore позволит вам сделать это с помощью своих функций curry. Некоторые более новые библиотеки, такие как Ramda и FKit сделать это автоматически. Их версии get и map уже рассчитаны на то, чтобы использоваться таким образом. (Раскрытие информации: Я являюсь одним из авторов Рамды)

+0

Я знаю, что он имеет в виду асинхронный материал. Тем не менее, представляется полезным применить вашу собственную функцию к объекту и передать результат следующей функции, а также в синхронной ситуации. – Erik

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

  • Нет связанных вопросов^_^