jquery – 延迟与promise

前端之家收集整理的这篇文章主要介绍了jquery – 延迟与promise前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
除了jQuery版本之外,Deferred和Promise之间有什么区别?

我应该为我的需要使用什么?我只想调用fooExecute()。我只需要fooStart()和fooEnd()来切换html div状态为例。

//I'm using jQuery v2.0.0
function fooStart() { /* Start Notification */ }
function fooEnd() { /* End Notification */ }
function fooExecute() { /* Execute the scripts */ }

$('#button1').on('click',function() {
    var deferred1 = $.Deferred();
    var promise1 = $.Promise();

    deferred1.???

    promise1.???
});

解决方法

首先:你不能使用$ .Promise();因为它不存在。

延迟对象是一个可以创建promise并将其状态更改为已解决或已拒绝的对象。如果您编写自己的函数并希望对调用代码提供一个promise,则通常使用延迟。你是价值的生产者。

正如名字所说,承诺是对未来价值的承诺。你可以附加回调来获取该值。承诺是“给予”你,你是未来价值的接受者。
您不能修改promise的状态。只有创建promise的代码可以改变它的状态。

例子:

1.(产生)当您想为自己的函数提供promise支持时,使用延迟对象。您计算一个值,并希望控制何时解决promise。

function callMe() {
    var d = new $.Deferred();
    setTimeout(function() {
        d.resolve('some_value_compute_asynchronously');
    },1000);
    return d.promise();
}

callMe().done(function(value) {
    alert(value);
});

2.(forward)如果你调用一个函数本身返回一个promise,那么你不必创建自己的延迟对象。你可以返回那个承诺。在这种情况下,函数注意创建一个值,但转发它(种类):

function fetchData() {
    // do some configuration here and pass to `$.ajax`
    return $.ajax({...});
}

fetchData().done(function(response) {
    // ...
});

3.(接收)有时你不想创建或传递promises /值,你想直接使用它们,即你是一些信息的接收者:

$('#my_element').fadeOut().promise().done(function() {
    // called when animation is finished
});

当然所有这些用例也可以混合使用。您的函数可以是值的接收者(例如从Ajax调用),并基于此计算(产生)不同的值。

相关问题:

> What are the differences between Deferred,Promise and Future in Javascript?
> What’s the difference between a Deferred object and its own promise object?

原文链接:https://www.f2er.com/jquery/184761.html

猜你在找的jQuery相关文章