Copyright (c) 2014-2018 Suguru Motegi Based on Async.js, Copyright Caolan McMahon