Reading data sent by slave device in master using I2C

I am in the process of designing a project, where two Arduino's will be talking to each other through I2C. One Arduino will act as a master and the other one will act as a slave.

I want the master to send specific commands to slave and I want the slave to respond to these commands. In short I want to have a I2C slave similar to I2C Digital Potentiometer.

I am trying to implement it using the built-in Wire library, but couldn't.

From the master, I am initiating the command by using the following code

    Wire.beginTransmission(4); // transmit to device #4
    Wire.write(0x01);              // sends one byte  
    Wire.endTransmission();

and in the slave I have the following code

void receiveEvent(int numBytes)
{
    byte received = Wire.read();
    if (received == 0x01) {
        Wire.write(received);
    } else {
        Wire.write(2);
    }
}

void setup() {  
    Wire.begin(4);
    Wire.onReceive(receiveEvent);
}

The slave receives the command from the master and is able to write the correct value. But I am not able to read the value back in master.

I tried to use a onReceive handler in master. But I found that onReceive can't be used in master. Apart from it I was not able to find a way to read this data from slave in master.

My so my question is how can we read the data that was sent by slave to master in response to a data that was sent by master?

how can we read the data that was sent by slave to master in response to a data that was sent by master?

Wire.available() and Wire.read().

Yeah I know about Wire.available() and Wire.read()

But what I meant in my question is that, I want to read the data in master that was just send by slave in response to a command that was sent by master.

I want to do something like this

Master sends command 1
Slave responds back with answer to command 1

.. after sometime

Master sends command 2
Slave responds back with answer to command 2

It is very difficult to emulate this behavior using Wire.available() and Wire.read()

What I want is a callback in master (similar to onReceive in slave). Is it something that is possible to do using the Wire library?