我在javascript中有一个对象。对象中的方法是从对象外部调用的。我希望此方法在200毫秒后自动调用自身(有点递归,但不是完全),直到条件被满足为止。

this.setSearchResult = function(data){
    if(initiated){
        doSetSearchResult(data);
    }else{
        console.log("Map is not initiated yet. Waiting 200 ms");
        setTimeout(function(){setSearchResult(data);}, 200); // <- Error
    }
}


调用setSearchResult的方式是这样的:

mapView = new MapView(imageData);
mapView.setSearchResult(data);


我得到的错误是ReferenceError: setSearchResult is not defined.

解决该错误的一种方法是将setTimeout调用更改为:

setTimeout(function(){mapView.setSearchResult(data);}, 200);


但是我发现这很丑陋(即使它可能在我的应用程序中也可以)。

有适当的方法吗?我必须在setSearchResult中跳过使用setTimeout吗?

最佳答案

我认为这应该工作:

this.setSearchResult = function(data){
    if(initiated){
        doSetSearchResult(data);
    }else{
        var _this = this;

        console.log("Map is not initiated yet. Waiting 200 ms");
        setTimeout(function(){_this.setSearchResult(data);}, 200); // <- Error
    }
}


这是因为您在回调函数中,所以您无权访问setSearchResult函数。

09-27 16:29