jquery在完成另一个之后运行自定义函数
我只想在前一个自定义函数完成后执行自定义函数 我尝试了承诺,做了,什么时候做了,但它没有正常工作。执行第二个函数时,第一个函数未完全完成 例如,我希望执行function1(),然后仅在function1完成时执行function2:jquery在完成另一个之后运行自定义函数,jquery,callback,wait,deferred,Jquery,Callback,Wait,Deferred,我只想在前一个自定义函数完成后执行自定义函数 我尝试了承诺,做了,什么时候做了,但它没有正常工作。执行第二个函数时,第一个函数未完全完成 例如,我希望执行function1(),然后仅在function1完成时执行function2: function1(); function2(); 我试过这个,但根本不起作用: promise(function1()).done(function2); 下面是我的函数1的脚本: function function1() { nbofslides
function1();
function2();
我试过这个,但根本不起作用:
promise(function1()).done(function2);
下面是我的函数1的脚本:
function function1() {
nbofslides = $('.Slide img').length;
currentslide = 1;
if ( nbofslides == currentslide) {
if ( nbofslides > 1) {
for (i = 1 ; i <= nbofslides ; i++) {
if (i == 1) {
$('.slider-pagination').append('<li class="slider-page selected bgcolor2"></li>');
} else {
$('.slider-pagination').append('<li class="slider-page bgcolor2"></li>');
}
}
}
$('.iosSlider').iosSlider({
responsiveSlideContainer: true,
responsiveSlides: true,
snapToChildren: true,
desktopClickDrag: true,
keyboardControls: true,
infiniteSlider: true,
navSlideSelector: true,
autoSlide: false,
navNextSelector: $('.slider-next'),
navPrevSelector: $('.slider-prev'),
navSlideSelector: $('.slider-pagination .slider-page'),
onSlideChange: slideChange
});
var setHeight = $('.iosSlider .Slide:eq(0)').outerHeight(true);
$('.iosSlider').css({
height: setHeight
});
function slideChange(args) {
$('.slider-pagination .slider-page').removeClass('selected');
$('.slider-pagination .slider-page:eq(' + (args.currentSlideNumber - 1) + ')').addClass('selected');
}
}
currentslide++;
}
函数function1(){
nbofslides=$('.Slide img')。长度;
currentslide=1;
如果(nbofslides==当前幻灯片){
如果(nbofslides>1){
对于(i=1;i,当函数1完成时,您必须通知函数2(或执行函数2的某个程序)
var deferredObj = $.Deferred();
var function1 = function () {
... do some stuff ...
... and an ajax request ...
$.ajax(...).done(function(){
deferredObj.resolve();
});
}
deferredObj.done(function(){
function2();
});
但是,jQuery使$.ajax返回一个promise对象,从而使这一点更加容易
var function1 = function() {
return $.ajax(...);
}
function1().done(function2)
这并不容易,因为大多数函数不需要任何“时间”来完成,它们只是“执行一系列命令”,然后调用下一个函数
对于JQuery动画,它是这样运行的(jqueryapi编写的代码)
如果我们想为自己的函数使用动画队列,我们可以使用:
var div = $("div");
div.show("slow");
div.animate({left:'+=200'},2000);
div.slideToggle(1000);
div.slideToggle("fast");
div.queue(function () {
alert('We are now at step 4 and if you press OK we go to 5.');
$(this).dequeue();
});
div.animate({left:'-=200'},1500);
...
我希望这就是你要找的
如果没有,请记住jQuery动画有一个内置的成功函数解决方案:
div.animate({left:'-=200'},1500,function(){
// if animation done, use this code here
});
如果你想延迟你的命令,还有一些东西可以帮你:
div.delay(800).effect("pulsate", {}, 2000).delay(800).queue(someOtherFunction);
在这种情况下,我们将等待800毫秒,然后使用脉动效应(2000毫秒),再等待800毫秒,然后启动“someOtherFunction”
}您的第一个函数中有ajax调用吗?我在函数1中没有任何异步任务…您不能像这样执行-->
function1();function2();
@freaky然后您就可以执行function1();function2()
它们将一个接一个地运行。我的猜测是,实际上您确实有一些异步操作正在进行,否则函数2不可能在函数1完成之前启动。它不能这样工作,因为它会先执行函数1,然后再执行函数2。因此,不必等到执行函数1中的所有脚本后再执行函数2中的脚本(尝试使用alert())。它几乎同时读取两个函数。这是jquery的正常行为。谢谢你的回答。但我不明白你是如何在ajax中编写一些东西的。可能是成功的方法?你为什么需要在ajax中编写一些东西?目前还不清楚你想做什么或你的问题是什么。你能提供还有更多的示例代码吗?你首先说你没有做任何异步的事情,现在你在谈论ajax。ajax是异步的。我做了很多事情。我有一些if条件,一些jquery插件初始化,一些css技巧和其他函数在里面…我想延迟方法将是我最好的方式,但我从来没有使用过它我想我写错了……对……但这正是我们需要看到的。如果你所描述的是真的发生了,那么其中的某些东西是异步的。为了能够在所述异步方法完成后调用function2,我们必须知道所述方法是什么。我在function1中没有异步任务,当我使用延迟方法时,它可以工作警报很好,但没有警报什么都不会发生谢谢你的回答,但我使用的函数不能使用延迟参数。这不是动画…我总是试图避免等待时间…好吧,我不知道你想用它做什么。基本上这是三种不同的解决方案。
div.delay(800).effect("pulsate", {}, 2000).delay(800).queue(someOtherFunction);
$('a.button').click(function(){
if (condition == 'true'){
function1(someVariable, function() {
function2(someOtherVariable);
});
}
else {
doThis(someVariable);
}
});
function function1(param, callback) {
...do stuff
callback();