Switch to use promises where possible

I think this will cause a bug when any tile has an error, because it won't call back to the main thread to sync state there (if you follow the old logic flow, it would always `resolve` with the tile hash info to update.