callback hell is basically the callback structure where you nest callback functions inside other callback functions it's like the famous if image

patching callbacks through different other functions.
promises basically are an collection + a shared state where you can define a flow of behavior :)
the idea is a non blocking control structure that triggers different asynchronous request in parallel that should resolve together.
The idea is rather old (Futures, Promises), but you know how it is we're really slow in catching up :).
mattgreer.org/articles/promises-in-wicked-detail
The callback hell is basically just the classic state hell of fragmented programming :). But that's just my opinion :) I guess real js programmers can elaborate in more detail about what and why :) I use them in different languages.