javascript - Promise 和延迟对象

标签 javascript jquery promise deferred

我从这里得到了一个非常好的答案,将两个建议的方法缝合在一起,但我不知道如何让代码正常工作。

var animals = ['mouse', 'newt', 'shrew', 'grasshopper', 'frog', 'hedgehog'];

$('#s1text1').delay(dur).fadeOut(dur).promise()
.then(function() {
    return $('#s1text2').fadeIn(dur).promise();
})
.then(function() {
    var p = new $.Deferred().resolve();
    return $.each(animals, function(i, animal) {
        p = p.then(function() {
            return $('.' + animal).fadeIn(defaultDur, function() {
                animateAnimalGroup(animal);
            }).promise();
        });
    })
    .then(function() {
        return $('#s1text2').fadeOut(dur).promise();
    })
    .then(function() {
        return $('#s1text3').fadeIn(dur).promise();
    })
    .then(function() {
        return $('#s1text4').fadeIn(dur).promise();
    });

任何帮助/建议将不胜感激。如果有人知道的话,一篇关于这方面的好的教程/文章也会非常有用,我已经读了一些内容,但正在努力理解它。

最佳答案

你不想返回$.each的结果,你想返回你在循环中累积的p promise 。另外,它缺少右括号:

.then(function() {
    var p = new $.Deferred().resolve();
    $.each(animals, function(i, animal) {
        p = p.then(function() {
            …
        });
    })
    return p;
})
.then(…)

关于javascript - Promise 和延迟对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24067235/

相关文章:

javascript - 如何使用 jquery 设置当前窗口大小和位置(因为 body onload 不适用于 asp.net)

javascript - 当我不期望时变得不确定

javascript - 如何在图例点击图表js时显示/隐藏动画

javascript - 如何将 'hover' 函数更改为 'on' 函数?

javascript - 是否可以链接 .all() 而不是使用 Promise.all() ?

javascript - 在数组和对象之间使用逗号运算符的 Promise.all 如何工作?

javascript - 使用回调 hell 将构建转换为 promise hell

javascript - 移动设备上输入的数字的最大长度

jquery - 尝试使用jquery获取隐藏字段的值

javascript - 是否可以直接使用 jquery 和 Svg(无插件)?