shouldn't the callback be called asynchronously using setTimeout(,0)