implement Promises/A+ 1.1