javascript - JQuery Promise 面临的问题

标签 javascript jquery

我想在执行函数内的动画后触发函数。因此我选择了jquery Promise。但是,一旦“.block1”的第一个动画完成,.done 函数就会被触发,它不会等待“.block2”的动画。

HTML:

<div class="block1"></div>
<div class="block2"></div>

Javascript:

$(document).ready(function () {
doAnimation().done(function () {
    alert('promise');
});
});

function doAnimation() {
    var deferred = $.Deferred();
    $('.block1').animate({
        'marginLeft': '200px', 'width': '400px'
    }, 2000, function () {
        deferred.resolve();
    });

    $('.block2').animate({
        'marginLeft': '0px', 'height': '400px'
    }, 4500, function () {
        deferred.resolve();
    });

    return deferred.promise();
}

CSS:

.block1,.block2
    {
        width:200px;
        height:200px;
        background:orange;
        border:1px solid #ccc;    
    }

最佳答案

只要调用一次 resolve ,Promise 就会被解析,如果你想等待两个事件,你需要创建两个 Promise 并等待它们,例如:

function doAnimation() {
    var deferred1 = $.Deferred();
    var deferred2 = $.Deferred();
    $('.block1').animate({
        'marginLeft': '200px', 'width': '400px'
    }, 2000, function () {
        deferred1.resolve();
    });

    $('.block2').animate({
        'marginLeft': '0px', 'height': '400px'
    }, 4500, function () {
        deferred2.resolve();
    });

    return $.when(deferred1, deferred2);
}

关于javascript - JQuery Promise 面临的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35145911/

相关文章:

javascript - 无法将选择选项设置为默认值

javascript - 从 innerHTML 获取输入类型的名称

javascript - jQuery "Can only call NodeList.item on instances of nodelist"

javascript - 使用 jquery 更改具有子菜单的 UL 列表菜单的类

javascript - 将 HTML 表格导出到 Excel 文件

javascript - 从 Url 中提取单词

javascript - Google Charts API 自定义月份名称

javascript - React + React Router,处理所有在新选项卡中打开的链接

javascript - 使用 firebase 并使用动态键名保存

javascript - 需要使用 Jquery 选出菜单下拉项