You should use arrow function here, to preserve existense of this.
setTimeout(()=>{
this.http.post(... //http is not defined here
})
In doing so, this inside of the function is bound to the outer context. It is the same as:
setTimeout(function(){
this.http.post();
}.bind(this));