Sorry I meant:

const tap = f => x => {
  f(x);
  return x;
}


Elie ROTENBERG
Directeur général adjoint
elie.rotenb...@webedia-group.com
336 89 29 98 19
twitter elierotenberg  facebook elie.rotenberg  skype elie.rotenberg github
elierotenberg
2, rue Paul Vaillant Couturier - CS 60102 - 92532 Levallois-Perret Cedex -
T: 33 811 69 41 42


On Sun, Jul 16, 2017 at 8:09 PM, Elie Rotenberg <e...@rotenberg.io> wrote:

> I think the most common use of this pattern would be debugging, and in
> this context you don't really care to use a little helper and
> Array.prototype.map, eg:
>
> const tap = f => ...args => {
>   f(...args);
>   return x;
> };
>
> [1, 2, 3]
>   .map(num => num * 2)
>   .map(tap(console.log.bind(console)));
>   .reduce((a, b) => a + b);
>
>
> On Sun, Jul 16, 2017 at 8:00 PM, Eli White <e...@eli-white.com> wrote:
>
>> I'd like to propose a `.tap` method on the Array prototype. I was able to
>> find some previous discussion here but it was off the main topic and seemed
>> to die out: https://mail.mozilla.org/pipermail/es-discuss/2015-Octo
>> ber/044454.html
>>
>> A tap method enables the user to inspect an array in the chain.
>>
>> For example, inspection:
>>
>> If you have a chain like this:
>>
>> ```
>> [1, 2, 3]
>>   .map(num => num * 2)
>>   .reduce((a, b) => a + b);
>> ```
>>
>> When you want to see what the value of the array is between the map and
>> reduce, you would typically do this:
>>
>> ```
>> const value = [1, 2, 3]
>>   .map(num => num * 2);
>>
>> console.log(value);
>>
>> value.reduce((a, b) => a + b);
>> ```
>>
>> With `.tap`, you'd be able to do this:
>>
>> ```
>> [1, 2, 3]
>>   .map(num => num * 2)
>>   .tap(console.log.bind(console));
>>   .reduce((a, b) => a + b);
>> ```
>>
>> `.tap` would be called once, passed the entire array as the first
>> argument to the callback, and would return the array after the callback was
>> finished.
>>
>> This isn't something that can cleanly be done with a user-land function
>> since it would have to wrap the chain, or replace all of the chained
>> functions like underscore does.
>>
>> An example of wrapping the chain:
>>
>> ```
>> myTap(
>>   (
>>     [1, 2, 3]
>>       .map(num => num * 2)
>>   ),
>>   console.log.bind(console);
>> )
>> .reduce((a, b) => a + b);
>> ```
>>
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss@mozilla.org
>> https://mail.mozilla.org/listinfo/es-discuss
>>
>>
>
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to