added promise failure callback