I'm going to assume that by "async" you mean asynchronous programming, and by "reactive" you mean reactive programming, and you're not referring to any specific technologies.
Reactive programming is a form of asynchronous programming. Asynchronous programming just means that you're writing code that will not be executed immediately, as in imperative programming, but at "some point in the future".
Reactive programming is characterized by the execution of the asynchronous code being triggered by the arrival of data to execute on. Data arrives regardless of whether the code is ready to process it. It is "pushed" into the application.
Reactive programming is "push-based". The opposite is "pull-based". Pull-based code doesn't react to data arriving, instead, it gets ready to process data and only then does it ask for data.
What style of programming is more natural to use depends on whether your data source is active or passive. An active data source supplies data regardless of whether there is anything ready to read it. A passive data source does nothing, and only supplies data when you ask for it.
Our first order of business must be this tiny ad:
Building a Better World in your Backyard by Paul Wheaton and Shawn Klassen-Koop