add some promise tools