Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jquery在完成另一个之后运行自定义函数_Jquery_Callback_Wait_Deferred - Fatal编程技术网

jquery在完成另一个之后运行自定义函数

jquery在完成另一个之后运行自定义函数,jquery,callback,wait,deferred,Jquery,Callback,Wait,Deferred,我只想在前一个自定义函数完成后执行自定义函数 我尝试了承诺,做了,什么时候做了,但它没有正常工作。执行第二个函数时,第一个函数未完全完成 例如,我希望执行function1(),然后仅在function1完成时执行function2: function1(); function2(); 我试过这个,但根本不起作用: promise(function1()).done(function2); 下面是我的函数1的脚本: function function1() { nbofslides

我只想在前一个自定义函数完成后执行自定义函数

我尝试了承诺,做了,什么时候做了,但它没有正常工作。执行第二个函数时,第一个函数未完全完成

例如,我希望执行function1(),然后仅在function1完成时执行function2:

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();