leecher.us phantomjs promises model impl