2017-07-06 103 views
-2

请您使用.done()以确保在开始执行下一个功能之前功能已完全执行。我从Ajax借鉴了这个想法。但它不起作用。我不断收到错误消息done()不是一个函数。 仅对于Ajax是done()?如果是的话,我怎么能实现我的愿望。如何在开始执行其他功能之前完成功能执行

document.onreadystatechange = function() { 
    if (document.readyState === "complete") { 
    //do somethings 

    } 
} 

//This must be completely executed before addNu() 
$("#mybutton").click(function() { 
    //Do some things 

}).done(addNu()); 


function addNu() { 
    //do some things 
} 

请注意,没有一个脚本是异步的。每个必须完成才能运行下一个

+0

'点击()'是不是异步的,所以'做()' - 即使它的工作 - 是多余的。它不会工作,因为'click()'返回一个jQuery对象,而不是Promise。目前还不清楚你在问什么,但可能你在点击处理程序中有一个AJAX调用,并且当完成时你想调用'addNu()'?如果是这样,请将addNu()调用放在AJAX代码的回调中。 –

+0

https://api.jquery.com/jquery.when/ – prasanth

+0

[前一个函数完成后调用函数]的可能重复(https://stackoverflow.com/questions/5000415/call-a-function-after-先前功能已完成) – DanD

回答

0

为什么你不只是在.click事件结束时调用该函数?

document.onreadystatechange = function() { 
    if (document.readyState === "complete") { 
    //do somethings 

    } 
} 

//This must be completely executed before addNu() 
$("#mybutton").click(function() { 
    //Do some things 

    addNu() 
}); 


function addNu() { 
    //do some things 
} 
+0

这不起作用,因为在function2开始执行新的图像渲染之前,function1没有完成清除页面上的现有图像。最后,我们在页面上显示新旧图像。我已经阅读过这种情况,但直到现在从未经历过。它适用于图像渲染,动画等。因此,我们必须确保在function2开始执行之前,function1完成执行。在阅读其他人提出的参考文献之后,我已经提供了我的可行解决方案。 – Kingsley

0

我已经通过规定这里给出解决方案,并引用了。没有工作,因为这些脚本既不是ajax也不是异步。 我解决这样说:

document.onreadystatechange = function() { 
    if (document.readyState === "complete") { 
    //do somethings 

    } 
} 

//This must be completely executed before addNu() 
$("#mybutton").click(function() { 
    //Do some things 

    //Check if completely done e.g.  
    length = $('img').length;  

    if (!length) { 
    addNu();  
    } 
});  

function addNu() { 
//do some things 

}