gpt4 book ai didi

javascript - Deferred 对象和它自己的 Promise 对象有什么区别?

转载 作者:行者123 更新时间:2023-12-03 21:33:47 26 4
gpt4 key购买 nike

让我们创建一个简单的延迟对象:

defer = $.Deferred( function ( defer ) {
setTimeout( defer.resolve, 3000 );
});

上面的Deferred对象会处于“pending”状态3秒,然后切换到“resolved”状态(此时绑定(bind)到它的所有回调都会被调用)。

让我们也检索该 Deferred 对象的 Promise:

promise = defer.promise();

现在,要添加在延迟对象解析后调用的回调,我们可以使用 .done().then()。但是,我们可以在 Deferred 对象本身或其自己的 Promise 对象上both调用此方法。

defer.then( handler );

promise.then( handler );

在这两种情况下,都会调用 handler 函数(在本例中为 3 秒后)。

如果我们使用$.when,我们可以再次传递 Deferred 对象本身或其 Promise 对象:

$.when( defer ).then( handler );

$.when( promise ).then( handler );

再次强调,上面两行代码没有区别。

现场演示: http://jsfiddle.net/G6Ad6/

所以,我的问题是,因为我们可以在 Deferred 对象本身上调用 .then().done() 等,并且因为我们可以传递该 Deferred对象放入 $.when() 中,.promise() 和检索 Promise 对象有什么意义? Promise 对象的目的是什么?为什么功能上会出现这种冗余?

最佳答案

它创建延迟值的“密封”副本,没有 .resolve().reject() 方法。来自 the documentation :

The deferred.promise() method allows an asynchronous function to prevent other code from interfering with the progress or status of its internal request.

当要修改的值没有意义时使用。例如,当 jQuery 发出 AJAX 请求时,它会返回一个 Promise 对象。在内部,它的 .resolve() 是原始 Deferred 对象的值,用户通过 Promise 观察到该值。

关于javascript - Deferred 对象和它自己的 Promise 对象有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8073528/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com