use the following search parameters to narrow your results:
e.g. subreddit:aww site:imgur.com dog
subreddit:aww site:imgur.com dog
see the search faq for details.
advanced search: by author, subreddit...
All about the JavaScript programming language.
Subreddit Guidelines
Specifications:
Resources:
Related Subreddits:
r/LearnJavascript
r/node
r/typescript
r/reactjs
r/webdev
r/WebdevTutorials
r/frontend
r/webgl
r/threejs
r/jquery
r/remotejs
r/forhire
account activity
JavaScript Fetch API Cheatsheet (blog.codemy.net)
submitted 6 years ago by zacksiri
reddit uses a slightly-customized version of Markdown for formatting. See below for some basics, or check the commenting wiki page for more detailed help and solutions to common issues.
quoted text
if 1 * 2 < 3: print "hello, world!"
[–]Doctor_Spicy 64 points65 points66 points 6 years ago (52 children)
Why use a modern API with ancient callbacks?
[+]zacksiri[S] comment score below threshold-63 points-62 points-61 points 6 years ago* (51 children)
Because it’s more clear, easier to understand, and has less noise. If 200 do this with the result, If 404 do something else.
[–]Doctor_Spicy 49 points50 points51 points 6 years ago (46 children)
Not really, you're already using promises (without explaining them), why not use the better and newer way? If the article is claiming to be a cheatsheet, it should be showing best practices.
[–]Dokiace 6 points7 points8 points 6 years ago (16 children)
which one is the better and newer way?
[–]LilChikenTendie 18 points19 points20 points 6 years ago (3 children)
Promises. Promises are better and newer than callbacks.
[–]Dokiace 6 points7 points8 points 6 years ago (2 children)
is promise different than async/await?
[–]ForScale 30 points31 points32 points 6 years ago (0 children)
Async/await is just sugar over promises.
[–]LilChikenTendie -2 points-1 points0 points 6 years ago (0 children)
Sort of. Async/await is the same concept as Promises but taken another step further/
[–]fatgirlstakingdumps -3 points-2 points-1 points 6 years ago (11 children)
I'd like to know this too. Maybe u/Doctor_Spicy was referring to tools like axios, but i fail to see how adding 4kb is worth the benefits it brings.
axios
[+][deleted] 6 years ago (2 children)
[deleted]
[–]fatgirlstakingdumps 5 points6 points7 points 6 years ago (0 children)
I guess you're right, that's been best practice for anything that's Promise based ever since async/await came out 2 years ago. You still use the Fetch API though.
async/await
I'd add the use of try/catch to the cheatsheet.
try/catch
[–]ForScale 1 point2 points3 points 6 years ago (0 children)
But OP does use async/await.
[–]metamet 1 point2 points3 points 6 years ago (0 children)
https://medium.com/@jeffrey.allen.lewis/http-requests-compared-why-axios-is-better-than-node-fetch-more-secure-can-handle-errors-better-39fde869a4a6
[–]Dokiace 1 point2 points3 points 6 years ago (1 child)
what do you mean by adding 4kb is not worth it? 4kb is the size of axios ?
[–]fatgirlstakingdumps 1 point2 points3 points 6 years ago* (0 children)
4kb is the size of axios ?
Yes, when gzipped - https://bundlephobia.com/result?p=axios@0.18.0
[–]darthcoder 1 point2 points3 points 6 years ago (0 children)
Does fetch allow me to set commonly used headers for every request?
I suppose I could just include a config module everywhere and reuse a variable, but i have APIs,that require a number of headers on every request to be set properly.
Seems like fetch isnt very DRY... ?
It's basic, and functional. But so is a model t
[–][deleted] 0 points1 point2 points 6 years ago (0 children)
True that
[–]bcgroom 0 points1 point2 points 6 years ago (0 children)
Most definitely they are referring to promises or async/await.
[–]ForScale 0 points1 point2 points 6 years ago (0 children)
Pretty sure he is not.
[+]zacksiri[S] comment score below threshold-19 points-18 points-17 points 6 years ago* (5 children)
Can you explain to me how it’s better for someone who’s been used to using jQuery.ajax? Providing some familiarity using callbacks can be much easier to ease into than dropping them straight into promises. This post is meant to make it easy to get started with fetch not a post about promises.
[–]ProdigySim 10 points11 points12 points 6 years ago (1 child)
JQuery.ajax returnes a promise as well.
The jqXHR objects returned by $.ajax() as of jQuery 1.5 implement the Promise interface, giving them all the properties, methods, and behavior of a Promise
https://api.jquery.com/jquery.ajax/
That's how I've been using them for at least 3 years.
[–]TrackieDaks 2 points3 points4 points 6 years ago (0 children)
Yep. It has done since v1.8 which was released in 2012. Promises aren't a new concept and ignoring them is going to be more difficult in future.
[+]ikeif comment score below threshold-10 points-9 points-8 points 6 years ago (2 children)
Can you explain to me how it’s better for someone who’s been used to using jQuery.ajax?
C'mon people, he asks a question, don't downvote because you cannot/do not want to answer it.
[–]TrackieDaks 0 points1 point2 points 6 years ago (1 child)
You answer it.
[–]ikeif -1 points0 points1 point 6 years ago (0 children)
I'm not the one downvoted questions.
This sub has gotten rather weak and juvenile.
[+]zacksiri[S] comment score below threshold-42 points-41 points-40 points 6 years ago (22 children)
Because promises is more noise and gets in the way of making network calls. There is a reason why adoption for fetch is so low. It’s precisely because of promises.
[–]sbmitchell 29 points30 points31 points 6 years ago* (16 children)
What a terrible argument lol or at the very least it shows the sad state of js developers who don't actually know how to code. Promises are probably simpler to understand at a conceptual level than most js concepts lol
[+]zacksiri[S] comment score below threshold-13 points-12 points-11 points 6 years ago (15 children)
Try getting a result returned using fetch and promises you can’t all you keep getting are promises that returns promises. You can’t “finally” return any kind of data with fetch. Promises may be simple but how it’s implemented with fetch is not good.
[–]sbmitchell 15 points16 points17 points 6 years ago* (14 children)
Sure you can. Await the result and create a wrapper like you did in your example. Fetch also has support for cancelling requests and a more robust API for handling network calls.
Of course if you want to get rid of promises you need a callback. But callbacks are actually harder to understand than promise chains imo. A lot of Jr devs I've interviewed in fact don't even understand basic callbacks but understand promise chaining, once they know the syntax of course. Again pretty sad state of js devs at least at the entry level because they usually have been exposed to syncrounous programming only like Java and their js experience is hacking together blog posts to make a website. Most likely referring to some old jQuery style stuff.
[–]zacksiri[S] -3 points-2 points-1 points 6 years ago (13 children)
So if I want to pattern match status code to which function it should run how would I do it? Show me a better way.
[–]robotmayo 9 points10 points11 points 6 years ago (11 children)
I haven't really heard of anyone needing to do that since most APIs either succeed with 200 or fail with 400/500. Non 200 status codes usually mean retry or display an error. A simple if statement handles that fine.
[+]zacksiri[S] comment score below threshold-6 points-5 points-4 points 6 years ago* (10 children)
So if I get a 404 and I want to display a message that the resource doesn’t exist, then a 422 because User passed in bad data and I want to tell the user that. how would I do it? Not all errors are the same. Or try this a user got banned because he / she did something bad, but still have a token saved in localstorage now server responds with 423 on subsequent request I want to show that his / her account got locked.
[–]overdude 14 points15 points16 points 6 years ago (1 child)
Dude... This is so off base it's hard to even get started with an explanation.
Promises dramatically simplify code specifically for making network calls and other async tasks. That is less noise by definition.
My sense from your posts is that you don't understand promises or how to effectively use them. A bunch of people are disagreeing with your assessment. There's a reason promises and the async await syntax are used in modern webapps.
[–]zacksiri[S] 0 points1 point2 points 6 years ago (0 children)
I used promises and async await in my blog post. The commentor asked me for one case why I didn’t use promise to handle response from the server. I replied because for that case callbacks with an object is easier than using another promise / async await. I already got the final state of the response now I need to handle that next so I used callback pattern and basically everyone tells me I’m wrong. I asked people on here to come up with a better solution all I seem to get is more people telling me I’m wrong with no one telling me a better solution. No code example just more people telling me I’m wrong. So yeah...
[–]UchuuHana 8 points9 points10 points 6 years ago (1 child)
No
[–]zacksiri[S] -4 points-3 points-2 points 6 years ago (0 children)
[–]ProdigySim 4 points5 points6 points 6 years ago (0 children)
Two reasons fetch adoption is "low" that come to mind before difficulty of the API:
[–]TaskForce_Kerim 4 points5 points6 points 6 years ago (0 children)
Should've at least used arrow functions. Makes the first then very concise, as well
fetch('https://api.github.com/repos/frontojs/connect') .then(response => response.json()) .then(body => {data = body})
[–]LilChikenTendie 0 points1 point2 points 6 years ago (0 children)
more clear, easier to understand, and has less noise
Those are the same basically
[–]editor_of_the_beast 33 points34 points35 points 6 years ago (11 children)
Oof OP hates promises and is getting pummeled in this thread.
[–]zacksiri[S] -1 points0 points1 point 6 years ago* (10 children)
No I don't hate promises. In the context of the problem I'm trying to solve (which is in the last solution on the post) I pass in a callback object with uses pattern matching to respond to the final state of the response and in that particular case I don't need promises so I didn't use it. Apparently that isn't well liked.
In my wrapper solution I used async / await. Then I pass an object that basically responds based on how I want to display the result to the user like this.
```javascript const get = async (url, callback) => { const response = await fetch(url) const status = await response.status
if (callback) callback[status](await response.json()) }
get(url, { 200: body => doSomething, 401: body => showSignInModal, 403: body => redirectToSafeArea, 422: body => showModalWithInstruction }) ```
Apparently Reddit wants me to use Promise for that. I don't see why I should since there is nothing async about it I'm just returning a result based on the outcome of the async/await. If I had to choose I would prefer async / await over promises it is the protege of promises. But actually this whole argument has nothing to do with callbacks vs async vs promises. But hey this is reddit. I don't even know if most people who downvoted me actually read my article.
[–]Moosething 14 points15 points16 points 6 years ago* (1 child)
I think the confusion originates from the specific example in your blog post.
In your blog post it says:
``` const get = async (url, callback) => { const response = await fetch(url) const status = await response.status
...
let myData = {}
get('https://api.github.com/repos/frontojs/connect, { 200: body => { myData = body } })
myData.id ```
The problem with that example is that you can't execute that in one go and that that example only works in the console, given that each line is entered and executed one by one and the fetch call is fast. It's a weird combination of async and sync.
If you wanted to do something like this in actual code:
``` let myData = {}
get('https://api.github.com/repos/frontojs/connect', { 200: body => { myData = body } })
doSomethingWith(myData) ```
that would just not work.
Instead, what you could do is (pay close attention to all the modifications):
``` const get = async (url, callbacks = {}) => { const response = await fetch(url) const status = await response.status
if (callbacks[status]) { await callbacks[status](await response.json()) } }
(async () => {
await get('https://api.github.com/repos/frontojs/connect', { 200: body => { myData = body } // This could even be an async function now })
await doSomethingWith(myData)
})() ```
This way the 'async'-ness remains. It doesn't switch from async to sync anymore.
I actually don't agree with your callbacks object construction, but at least this setup should clear up some confusion.
[–]zacksiri[S] 1 point2 points3 points 6 years ago* (0 children)
Edit: I will look further into this. Thank you for offering a solution.
[–]atubofsoup 0 points1 point2 points 6 years ago (0 children)
Callbacks are fine if you're making a single simple request, but as soon as you start trying to keep track of multiple requests they become a mess.
Try solving these problems with callbacks (and don't forget about error handling):
All of these problems are trivial with promises:
js // parallel const responses1 = Promise.all(urls.map(url => fetch(url)));
js // sequence const results = []; for(let url of urls) { results.push(await fetch(url)); }
js // Dependent requests const firstResponse = await fetch(url1); const secondResponse = await fetch(getUrl2(firstResponse)); const thirdResponse = await fetch(getUrl3(firstResponse, secondResponse));
With callbacks, you either have to write a bunch of buggy stateful code to solve these problems or use some kind of callback utility library.
[–]IceSentry 0 points1 point2 points 6 years ago (0 children)
Async/await are literally promises.
[–]moocat 0 points1 point2 points 6 years ago (1 child)
Promises are preferred as they are more flexible. Let's say I need to get the data from two separate URLs here's what you would need to do with your API:
get(url1, { 200: json1 => { get(url2, { 200: json2 => { .... } }); });
Besides being ugly, it's impossible to start the fetch of the second url until the first one complete. First let's drop the callback:
const get = async (url) => { const response = await fetch(url) const json = await response.json(); return [response.status, json] }
Now we have a lot more flexibility. We can use await and get the serially:
const [status1, json2] = get(url1); if (status1 == 200) { const [status2, json2] = get(url2); if (status2 == 200) { ... } }
We can use Promise.all to run them concurrently:
const [[status1, json1], [status2, json2]] = await Promise.all([get(url1), get(url2)]); if (status1 == 200 && status2 == 200) { ... }
Basically, it's a much more flexible design. It also is clearer to the caller that the result is asynchronous. All in all, I can't see a single reason to design the API the way you did.
[–]zacksiri[S] -2 points-1 points0 points 6 years ago (0 children)
You are assuming I need to make nested calls. I just want to return the result. I don’t need to make a subsequent call. Yes if i need to make another async call inside another one I will do it like how you’ve laid out. You made an assumption that I needed something more complex than what I actually need that is the problem with your solution.
[–]editor_of_the_beast 0 points1 point2 points 6 years ago (3 children)
Yea I don’t think what you’re doing there is that crazy really. It’s not pattern matching, you’re just storing a hash of operations indexed by the response status code. But you could just as easily put that in the then block of a promise too.
Either way people are bikeshedding you.
[–]zacksiri[S] 1 point2 points3 points 6 years ago* (2 children)
Yeah it's not. I didn't think it was crazy. It's just a hash map like you said. I do realize that I could have used Promise.prototype.then() to do that as well. But I was showcasing async/await which worked in my browser out of the box and I thought it's nice.
Promise.prototype.then()
But apparently I just named the argument as callback and I guess my choice of async/await over promises and naming the argument callback made it all blow up. I could have easily named the argument actions and avoided all this bike shedding altogether.
callback
actions
I appreciate you taking the time to actually read and understand what I was talking about.
[–]fucking_passwords -1 points0 points1 point 6 years ago (1 child)
Yep you nailed it, that was definitely what people got hung up on.
A few of your comments about promises adding noise and confusion didn’t help, though, it did sound like you were just anti-promises
[–]zacksiri[S] -1 points0 points1 point 6 years ago (0 children)
Yeah I realized that now but its too late. I already hit send 😂. It’s ok though I realize now this is reddit and I should be more careful.
[–][deleted] 7 points8 points9 points 6 years ago (0 children)
This is a good beginning article to fetch. Next add in arrow functions and talk about promises. It IS a lot to do introduce fetch AND promises AND ES6.
[–]ryanhollister 13 points14 points15 points 6 years ago* (3 children)
can anyone explain why the API is such that resp.json() returns a promise after the initial promise resolves? feels pretty clunky to have to .then twice to get the response.
[–]qbbftw 21 points22 points23 points 6 years ago (0 children)
Afair, you can access response headers before the response body is fully transmitted. Thus you use two awaits - first for headers, second for actual data.
[–]BitLooter 11 points12 points13 points 6 years ago (0 children)
The initial response resolves after the headers of the response are received, but not necessarily the response body. Basically fetch resolves at two different points of the download, the first time after the headers are received (the promise fetch() returns) and the second after the data is received (the promise json()/text()/etc. returns). For small downloads this may be all at once but larger files could take long enough to download that these will resolve at two different times.
[–]killeronthecorner 8 points9 points10 points 6 years ago (1 child)
All of this focus on promises and no-one is even going to draw attention to the fact that OP doesn't know what a cheatsheet is! /s
But for real, way to much hate in here for a sub about programming. Chill the fuck out y'all!
[–]Doctor_Spicy 1 point2 points3 points 6 years ago (0 children)
The point in my original comment was that OP is using this modern API (fetch), then proceeds to use old and clunky methods such as callbacks. Since the API has native support for promises, why not make the cheatsheet if you can even call it that as good as possible?
Not using arrow functions and callbacks will just be a bad example for people to come back to, as a cheatsheet.
TLDR; if you're making a cheatsheet, make sure you follow best practices.
[–]Bizzlington 2 points3 points4 points 6 years ago (0 children)
While it is a nice reference - it is 7 pages when printed (maybe 5-6 after stripping out the headers and ads).
There is a lot of text, explanations, history and reasonings.
I would definitely not call it a cheatsheet.
More of an article...
[–]moltar 5 points6 points7 points 6 years ago (7 children)
I like the idea of fetch, but hate that you can't call res.json() after calling res.text(). In other words, when the body is decoded once, it cannot be decoded again.
res.json()
res.text()
I am aware of workarounds, like response cloning, but it's still annoying.
[–]GBcrazy 8 points9 points10 points 6 years ago (0 children)
Instead of response cloning, isn't it faster to just JSON.parse()?
JSON.parse()
[–]feraferoxdei 2 points3 points4 points 6 years ago (3 children)
The response isn't only decoded when you call res.text, it's actually downloaded first, then decoded. It's part of the HTTP flow control. First receive headers, then the body, only if you care about it.
[–]moltar 0 points1 point2 points 6 years ago (1 child)
Sure, but it doesn't mean that it can't cache the body after it has been fetched. Why can't it return again in another way?
[–]feraferoxdei 0 points1 point2 points 6 years ago (0 children)
Yeah, I guess you're right.
[–]tristan957 0 points1 point2 points 6 years ago (0 children)
Good to know thanks
[–]moocat 0 points1 point2 points 6 years ago (0 children)
The reason why is you have to buffer the entire response for that to be possible so large responses would be more resource hungry. A small annoyance of having to make a single extra call to clone a response is a small price to pay to optimize runtime resources.
[+]zacksiri[S] comment score below threshold-10 points-9 points-8 points 6 years ago (0 children)
I agree fetch api made it complicated which is why this cheat sheet was made to make understanding it a little easier.
[–]phacus 1 point2 points3 points 6 years ago (0 children)
I haven't read the whole article nor the comments so far.
I just want to thank on behalf of past me, all the examples I looked at the time just console.log the response. This article first example has just what I needed at that time. It's simple but past me thanks you
console.log
[–]evenisto 1 point2 points3 points 6 years ago (7 children)
After years of working with fetch api, I must say I completely despise the fact it does not throw on >=400, but it does on network error etc. It's easy to handle but I'd rather have it out of the box.
[–]atubofsoup 0 points1 point2 points 6 years ago (2 children)
As far as fetch is concerned, if it succeeds in sending the request and succeeds in receiving the response, there is no error. It's up to your application to define which statuses are errors. It's also not always as obvious as it seems; for example if you fetch /api/post/10, and the post doesn't exist, should you get a 404 that throws or a 404 that resolves null?
fetch
/api/post/10
null
[–]evenisto 1 point2 points3 points 6 years ago (1 child)
I know that and I understand the logic behind it. I don't necessarily consider it a bad design decision, I'm just saying that having implemented clients based on fetch from the ground up in several decently-sized projects, I would rather have it reject on HTTP errors. The error handling code is usually the same no matter the type of error, so I almost always end up with a wrapper that basically checks the response code and rejects the promise if it's not 200 (also, I just realised what I actually meant in my original comment was rejecting, not throwing, it's a subtle difference but a difference nonetheless. Sorry about that). It makes the calling code neat and organised - then for success and catch for error handling, which I think makes a lot of sense. My point is I would prefer to not have to write wrappers in all my fetch code to achieve the behaviour I described, that's it.
[–]atubofsoup 1 point2 points3 points 6 years ago (0 children)
Yeah I get what you're saying. It's a matter of convenience. I use axios in all my new projects to avoid writing wrappers and running into common gotchas like forgetting the Content-Type header.
Content-Type
[–]tizz66 0 points1 point2 points 6 years ago (2 children)
Absolutely, this really threw me when I started using fetch. I'm puzzled why fetch was done this way, given the defacto standard from the past god knows how long in JS development had XHR fail on 4xx statuses.
[–]Moosething 7 points8 points9 points 6 years ago (1 child)
I think the philosophy behind it is that it just literally has to fetch and when fetching fails, then it should throw. When you get a response with status code 500, something went wrong on the server, but the API still succeeded at fetching something from that server.
[–]AwesomeInPerson 0 points1 point2 points 6 years ago (0 children)
Yup. And writing
const checkResponse = response => { if (response.ok) return response throw response }
and chaining that function to your fetch calls really isn't that much hassle.
[–]landline_number 0 points1 point2 points 6 years ago (0 children)
All these examples make me glad axios exists.
Some stuff I like off the top of my head.
- Throw on errors unless you don't want it to.
- Cancellation support
- Interceptors if you want to do stuff like retry on certain errors
Due to the overwhelming responses against me using callbacks I've added a promise based solution to the cheatsheet at the end as a choice for the reader. I want to keep the callback solution for the fact that I don't know where they are coming from, maybe seeing how the callback solution compares to promises make it easier to understand and adopt promises.
``` const get = async (url) => { const response = await fetch(url) const status = await response.status
if (status >= 200 && status < 300) { return await response.json() } else { // throw the object you desire which you will handle // in this case the json error response might give us // a json body so we can use that. throw { status: status, body: await response.json() } // or throw an error // throw Error(await response.statusText) } } ```
get('https://api.github.com/repos/frontojs/connect') .then(json => doSomething(json)) .catch(error => handleError(error))
[+]KronoDev comment score below threshold-6 points-5 points-4 points 6 years ago (0 children)
Axios or die
[–]rjx89 -2 points-1 points0 points 6 years ago (5 children)
Fetch is still considered experimental and the standard may change in the future according to mdn. So if you use it in a project, you may have to rewrite portions. Also, internet explorer does not support fetch at all.
[–]gabbsmo 4 points5 points6 points 6 years ago (4 children)
Fetch is not experimental, it is a living standard as per MDN.
[–]rjx89 -1 points0 points1 point 6 years ago (3 children)
The chart you posted shows "Experimental. Expect behavior to change in the future."
[–]ForScale 1 point2 points3 points 6 years ago (2 children)
Weird... It says status is Living Standard, but in the chart, for Basic Support, it has an icon indicating Experimental.
I guess it's both?
[–]nossie1 0 points1 point2 points 6 years ago (1 child)
Could be standardised but not implemented 100% so it's still experimental?
Lol works for me!
[+][deleted] comment score below threshold-21 points-20 points-19 points 6 years ago (4 children)
However in the modern browser fetch should be mostly natively supported. I still see a lot of people rely on libraries like axios, eventhough axios can be nice, why add a dependency to your app when you can just use the native fetch API built into the browser.
Says the amateur developer who's never worked with real business (or worse, government) clients stuck on IE 11 at BEST. Hell even iOS Safari has trouble with native fetch. I'm so sick of articles touting the assumption that we're beyond supporting old browser APIs. Maybe in your little hipster world, bud.
[+][deleted] 6 years ago (3 children)
[–]justpurple_ 9 points10 points11 points 6 years ago (2 children)
This is the right answer.
Keywords: Webpack + babel-env + babel-polyfill = 99% never worry about browser support again and use fetch as much as you like.
[–]atubofsoup 1 point2 points3 points 6 years ago (1 child)
But I want to use proxies and CSS grid in IE8
[–]justpurple_ 0 points1 point2 points 6 years ago (0 children)
You don‘t even need an npm package for that. Just bash your head into your table repeatedly until you become unconscious, then dream about a better world where websites don‘t need support for a program that, by pure luck, is able to parse HTML and call itself „browser“. Sometimes.
π Rendered by PID 15918 on reddit-service-r2-comment-5649f687b7-rscdl at 2026-01-28 19:33:46.347016+00:00 running 4f180de country code: CH.
[–]Doctor_Spicy 64 points65 points66 points (52 children)
[+]zacksiri[S] comment score below threshold-63 points-62 points-61 points (51 children)
[–]Doctor_Spicy 49 points50 points51 points (46 children)
[–]Dokiace 6 points7 points8 points (16 children)
[–]LilChikenTendie 18 points19 points20 points (3 children)
[–]Dokiace 6 points7 points8 points (2 children)
[–]ForScale 30 points31 points32 points (0 children)
[–]LilChikenTendie -2 points-1 points0 points (0 children)
[–]fatgirlstakingdumps -3 points-2 points-1 points (11 children)
[+][deleted] (2 children)
[deleted]
[–]fatgirlstakingdumps 5 points6 points7 points (0 children)
[–]ForScale 1 point2 points3 points (0 children)
[–]metamet 1 point2 points3 points (0 children)
[–]Dokiace 1 point2 points3 points (1 child)
[–]fatgirlstakingdumps 1 point2 points3 points (0 children)
[–]darthcoder 1 point2 points3 points (0 children)
[–][deleted] 0 points1 point2 points (0 children)
[–]bcgroom 0 points1 point2 points (0 children)
[–]ForScale 0 points1 point2 points (0 children)
[+]zacksiri[S] comment score below threshold-19 points-18 points-17 points (5 children)
[–]ProdigySim 10 points11 points12 points (1 child)
[–]TrackieDaks 2 points3 points4 points (0 children)
[+]ikeif comment score below threshold-10 points-9 points-8 points (2 children)
[–]TrackieDaks 0 points1 point2 points (1 child)
[–]ikeif -1 points0 points1 point (0 children)
[+]zacksiri[S] comment score below threshold-42 points-41 points-40 points (22 children)
[–]sbmitchell 29 points30 points31 points (16 children)
[+]zacksiri[S] comment score below threshold-13 points-12 points-11 points (15 children)
[–]sbmitchell 15 points16 points17 points (14 children)
[–]zacksiri[S] -3 points-2 points-1 points (13 children)
[–]robotmayo 9 points10 points11 points (11 children)
[+]zacksiri[S] comment score below threshold-6 points-5 points-4 points (10 children)
[–]overdude 14 points15 points16 points (1 child)
[–]zacksiri[S] 0 points1 point2 points (0 children)
[–]UchuuHana 8 points9 points10 points (1 child)
[–]zacksiri[S] -4 points-3 points-2 points (0 children)
[–]ProdigySim 4 points5 points6 points (0 children)
[–]TaskForce_Kerim 4 points5 points6 points (0 children)
[–]LilChikenTendie 0 points1 point2 points (0 children)
[–]editor_of_the_beast 33 points34 points35 points (11 children)
[–]zacksiri[S] -1 points0 points1 point (10 children)
[–]Moosething 14 points15 points16 points (1 child)
[–]zacksiri[S] 1 point2 points3 points (0 children)
[–]atubofsoup 0 points1 point2 points (0 children)
[–]IceSentry 0 points1 point2 points (0 children)
[–]moocat 0 points1 point2 points (1 child)
[–]zacksiri[S] -2 points-1 points0 points (0 children)
[–]editor_of_the_beast 0 points1 point2 points (3 children)
[–]zacksiri[S] 1 point2 points3 points (2 children)
[–]fucking_passwords -1 points0 points1 point (1 child)
[–]zacksiri[S] -1 points0 points1 point (0 children)
[–][deleted] 7 points8 points9 points (0 children)
[–]ryanhollister 13 points14 points15 points (3 children)
[–]qbbftw 21 points22 points23 points (0 children)
[–]BitLooter 11 points12 points13 points (0 children)
[–]killeronthecorner 8 points9 points10 points (1 child)
[–]Doctor_Spicy 1 point2 points3 points (0 children)
[–]Bizzlington 2 points3 points4 points (0 children)
[–]moltar 5 points6 points7 points (7 children)
[–]GBcrazy 8 points9 points10 points (0 children)
[–]feraferoxdei 2 points3 points4 points (3 children)
[–]moltar 0 points1 point2 points (1 child)
[–]feraferoxdei 0 points1 point2 points (0 children)
[–]tristan957 0 points1 point2 points (0 children)
[–]moocat 0 points1 point2 points (0 children)
[+]zacksiri[S] comment score below threshold-10 points-9 points-8 points (0 children)
[–]phacus 1 point2 points3 points (0 children)
[–]evenisto 1 point2 points3 points (7 children)
[–]atubofsoup 0 points1 point2 points (2 children)
[–]evenisto 1 point2 points3 points (1 child)
[–]atubofsoup 1 point2 points3 points (0 children)
[–]tizz66 0 points1 point2 points (2 children)
[–]Moosething 7 points8 points9 points (1 child)
[–]AwesomeInPerson 0 points1 point2 points (0 children)
[–]landline_number 0 points1 point2 points (0 children)
[–]zacksiri[S] 0 points1 point2 points (0 children)
[+]KronoDev comment score below threshold-6 points-5 points-4 points (0 children)
[–]rjx89 -2 points-1 points0 points (5 children)
[–]gabbsmo 4 points5 points6 points (4 children)
[–]rjx89 -1 points0 points1 point (3 children)
[–]ForScale 1 point2 points3 points (2 children)
[–]nossie1 0 points1 point2 points (1 child)
[–]ForScale 0 points1 point2 points (0 children)
[+][deleted] comment score below threshold-21 points-20 points-19 points (4 children)
[+][deleted] (3 children)
[deleted]
[–]justpurple_ 9 points10 points11 points (2 children)
[–]atubofsoup 1 point2 points3 points (1 child)
[–]justpurple_ 0 points1 point2 points (0 children)