在Angular 12 TypeScript中设置超时后调用函数?

icnyk63a  于 2023-02-17  发布在  TypeScript
关注(0)|答案(1)|浏览(133)

我想在设置超时过程后使用saveAsDraft函数。但是我得到了一个错误。我该怎么做?回调,承诺还是...

export class EditBlogComponent implements OnInit {
    ...
    //For draft save
    typingTimer:any;
    doneTypingInterval = 5000;
    ....

    saveAsDraft(blog:Blog) {
       console.log("Taslak kaydediliyor.", this.blog);
    }

    draftSecond(formValue: string) {
        clearTimeout(this.typingTimer);
        this.typingTimer = setTimeout(saveAsDraft(this.blog), 
        this.doneTypingInterval);
    }
  }

形象;

wlp8pajw

wlp8pajw1#

对saveAsDraft的调用应该在函数内部。
语法为-

setTimeout(function(){ ... }, timeInMilliseconds);

所以你应该-

setTimeout(function(){
     saveAsDraft(this.blog);
}, timeInMilliseconds);

另外,只需检查function()是否在function()中可用。它可能不可用。因此,您可以执行以下操作-

var refToThis = this;
setTimeout(function(){
     refToThis.saveAsDraft(refToThis.blog);
}, timeInMilliseconds);

或使用箭头函数

setTimeout(()=>{
     this.saveAsDraft(this.blog);
}, timeInMilliseconds);

没有this就不能访问saveAsDraft,因为this是类成员,只能使用其对象访问。

相关问题