take deferred with promise