add callbacks #2

Closed
ianstormtaylor opened this Issue Aug 4, 2012 · 11 comments

Projects

None yet

4 participants

@ianstormtaylor
Contributor

they should have a short timeout so that the root page is never blocked by a provider not returning fast enough

@ianstormtaylor
Contributor

realized its not that simple, because you have multiple providers you'd need to wait for. if you didn't wait, there's no point in it being a callback because it would just be synchronous.. if you did, well that get's real complex but is possible for each service that does have callbacks only...

@jsalonen

Here are my two cents:

  • Check if track function has third callback argument
  • If a service provider supports callbacks, pass that function
  • If a service provider doesn't support callbacks, simply call it right afterwards

Not of course an optimal solution, but IMHO better than nothing.

@afeld
afeld commented Dec 18, 2012

It should use a Promise (or the callback counter equivalent) to execute the callback after all have finished. For services that don't support callbacks, I'd say executing the callback immediately is fine, or setting a short timeout since that's what the user will probably be doing anyway. Adding a disclaimer to the README about those services should be sufficient.

@ianstormtaylor
Contributor

I was thinking a really basic implementation could not even care about the services themselves and put any callback behind a ~100ms timeout. (The kind of solution that Mixpanel and KISSmetrics use for their link tracking, click tracking and form tracking helpers.)

@afeld
afeld commented Dec 18, 2012

Safest would certainly be to use their callbacks, but if that's what they're doing in their libraries anyway, maybe it isn't worth the hassle.

@ianstormtaylor
Contributor

I'm not sure it's "safest" to use their callbacks, or at least I don't know what you mean by safest. But you could make a good argument for fastest (depending on their servers). Even with using their callbacks though, I think there should be a maximum timeout to prevent the callback from never firing if the servers are down... (Which I assume these services are implementing internally... but you never know. Seen some crazy stuff :p)

@afeld
afeld commented Dec 19, 2012

...or from calling it too soon. I wonder which of the providers execute the callbacks only on success, and which handle response errors, and which set a timeout to ensure the callback is always executed. With only a single callback, I'm not sure which would be preferable? I guess the timeout would be easiest because then it's somewhat normalized across the providers, no matter what they offer.

@ianstormtaylor
Contributor

Added these in with a default timeout length.

@philfreo
Contributor

This feature is great, but you should probably document it on http://segmentio.github.com/analytics.js/

@ianstormtaylor
Contributor

New documentation is in the works! Should be released tomorrow, stay tuned

@jsalonen

Guys: thanks a lot for implementing this!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment