Use watch to listen for events emitted by a smart contract method. You can define functions to be executed when certain events are caught.
Usage
let contract = await tronWeb.contract.at('contractAddress'); 
contract.eventMethod().watch((err, event) => {
	if (err){
    return console.error('Error with "method" event:', err);
  }
  if (event) { 
      // some function
  }
});
Parameters
No need to pass parameters
Returns
Object 
Example
//Example 1
async function triggercontract(){
    try {
        let instance = await tronWeb.contract().at('TQQg4EL8o1BSeKJY4MJ8TB8XK7xufxFBvK');
      
        instance.Transfer().watch((err, eventResult) => {
            if (err) {
                return console.error('Error with "method" event:', err);
            }
            if (eventResult) { 
                console.log('eventResult:',eventResult);
            }
          });
        let res = await instance.transfer('TWbcHNCYzqAGbrQteKnseKJdxfzBHyTfuh',500).send({
            feeLimit:100_000_000,
            callValue:0,
            shouldPollResponse:true
        });
        console.log(res);
    } catch (error) {
        console.log(error);
    }
}
triggercontract();
//Example 2
async function triggercontract(){
    try {
        let instance = await tronWeb.contract().at('TQQg4EL8o1BSeKJY4MJ8TB8XK7xufxFBvK');
      
        instance["Transfer"]().watch((err, eventResult) => {
            if (err) {
                return console.error('Error with "method" event:', err);
            }
            if (eventResult) { 
                console.log('eventResult:',eventResult);
            }
          });
        let res = await instance.transfer('TWbcHNCYzqAGbrQteKnseKJdxfzBHyTfuh',500).send({
            feeLimit:100_000_000,
            callValue:0,
            shouldPollResponse:true
        });
        console.log(res);
    } catch (error) {
        console.log(error);
    }
}
triggercontract();
| Parameter | Description | 
|---|---|
| err | Error | 
| event | Event Name emitted from the Smart Contract. | 
Filters
You can set filters in the contract.method().watch() function to only listen for events that produce specific, desired output values. Set them like:
contract.method().watch({filters: {"_filter1": "value1", "_filter2": "value2"}}, 
(err, res) => {})
Below is an example of how to implement filters:
//Filter_address is an event with 4112e621d5577311998708f4d7b9f71f86dae138b55
let watchTest = contract.method().watch({filters: {"_address": "0x12e621d5577311998708f4d7b9f71f86dae138b55"}}, (err, res) => {
  if(res) { 
    assert.equal(res.result._sender, accounts.hex[3])
    assert.equal(res.result._receiver, accounts.hex[4])
    assert.equal(res.result._amount, 4000)
    
    watchTest.stop()
  }
})
In the above example, the developer is only listening for events that produce an "_address" value of "0x12e621d5577311998708f4d7b9f71f86dae138b5", If it is an address type, need to replace 41 with 0x and convert hex format address to lower case .
