2017-08-24 43 views
0

我有以下代码:住宅“捆绑”的类型不存在“无效”

setInterval(this.CheckIfCameraIsAvailable(false).bind(this), 2 * 60 * 1000); 

private CheckIfCameraIsAvailable(forceCheck: boolean) { 

} 

我有以下错误:

Property 'bind' does not exist on type 'void'

错误将被当我删除解决( (CheckIfCameraIsAvailable)函数的参数forceCheck:boolean),但我想传递一个参数给函数。

+1

你试图调用该方法的结果结合,而不是方法,为什么不使用的AR行函数'setInterval(()=> this.CheckIfCameraIsAvailable(false),2 * 60 * 1000)'? – jonrsharpe

+0

当我从函数中删除(forceCheck:boolean)参数时,为什么错误会被解决? – Ala

+0

因为假设你在做'this.CheckIfCameraIsAvailable.bind(this)',没有括号,所以*实际上绑定了方法*。如果你做了'this.CheckIfCameraIsAvailable()。bind(this)'你会遇到同样的问题。您需要将不带参数的可调用传递给'setInterval'。 – jonrsharpe

回答

1

在您的示例中,您意外地调用该函数,然后尝试对结果使用.bind。正确的长手代码将是如下(你传递false参数为bind的一部分:

class Example { 
    CheckIfCameraIsAvailable(forceCheck: boolean) { 
    alert(forceCheck); 
    } 

    run() { 
    setInterval(this.CheckIfCameraIsAvailable.bind(this, false), 2000); 
    } 
} 

const example = new Example(); 
example.run(); 

速记的方式来保持词汇范围是使用箭头功能:

class Example { 
    CheckIfCameraIsAvailable(forceCheck: boolean) { 
    alert(forceCheck); 
    } 

    run() { 
    setInterval(() => this.CheckIfCameraIsAvailable(false), 2000); 
    } 
} 

const example = new Example(); 
example.run(); 

这是引入这样一个中间变量相当于:

class Example { 
    CheckIfCameraIsAvailable(forceCheck: boolean) { 
    alert(forceCheck); 
    } 

    run() { 
    const _this = this; 
    setInterval(function() { _this.CheckIfCameraIsAvailable(false) }, 2000); 
    } 
} 

const example = new Example(); 
example.run(); 
相关问题