With `contract = new web3.eth.Contract(abi, addr)`,

The one and only reason for `contract.methods.decimals().call()` to throw:
```
Error: Returned values aren't valid, did it run Out of Gas?
```
Is if no contract which implements function `decimals()` is deployed at `addr`.