我从下面的一个很好的答案中得到了以下内容:将两个建议的方法缝合在一起,但是我看不到如何使代码正常工作。

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承诺。此外,它缺少右括号:

.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/

10-13 08:49