gpt4 book ai didi

jquery - 延期与 promise

转载 作者:IT王子 更新时间:2023-10-29 03:26:01 27 4
gpt4 key购买 nike

除了 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 并将其状态更改为resolvedrejected 的对象.如果您编写自己的函数并希望为调用代码提供 promise ,通常会使用延迟。您是值(value)的生产者

promise ,顾名思义,就是对 future 值(value)的 promise 。您可以将回调附加到它以获得该值。 promise 已“给予”给您,您是 future 值(value)的接受者
您不能修改 promise 的状态。只有创建 promise 的代码才能改变它的状态。

例子:

1. (produce) 当你想为你自己的函数提供 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 的函数,那么您不必创建自己的延迟对象。您可以返回该 promise 。在这种情况下,函数不创造值(value),而是转发它(某种程度上):

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

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

3。 (接收)有时您不想创建或传递 promise /值,而是想直接使用它们,即您是某些信息的接收者:

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

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


相关问题:

关于jquery - 延期与 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17308172/

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