depend only on async.promise