我有这个功能。目的是在调用另一个函数之前等待外部状态结束。
var renderEditClickWrapper = function( event )
{
var wait = false;
function waitForSavingDone(){
if (options.dataStatusHandler.getStatus() == 'saving'){
wait = setInterval( function(){
waitForSavingDone();
}, 800);
}else{
wait = false;
call.renderEdit(event.data.name, event.data.rowId, event.data.parentId, event.data.options );
}
}
if (!wait) waitForSavingDone();
return false;
};
这样可行,但是当函数等待一次时,会反复调用该函数。
我也在使用jQuery。
知道我做错了吗?
答案 0 :(得分:1)
您可以尝试以下另一种选择: 定义等待函数如下:
function wait(waitComplete, onWaitComplete){
if (waitComplete()) {
onWaitComplete();
return true;
}
setTimeout(function(){
console.log('waiting...');
wait(waitComplete, onWaitComplete);
}, 800);
return false;
}
事件处理程序可以使用wait,如下所示:
var renderEditClickWrapper = function( event )
{
function isWaitComplete() {
return (options.dataStatusHandler.getStatus() != 'saving');
}
function onWaitComplete() {
call.renderEdit(event.data.name, event.data.rowId,
event.data.parentId, event.data.options);
}
wait(isWaitComplete, onWaitComplete);
};
答案 1 :(得分:0)
尝试使用clearInterval()方法取消间隔功能,而不是wait = false
。而且你也误解了区间函数的用法。如下所示:
var renderEditClickWrapper = function( event )
{
function waitForSavingDone() {
if (options.dataStatusHandler.getStatus() !== 'saving') {
clearInterval(wait);
}
}
var wait = setInterval(waitForSavingDone, 800);
return false;
};
您应该检查注释中提到的回调函数。如果您使用回调,则会更推荐它。