第一:你不能使用$.Promise();
,因为它不存在。
延迟对象是可以创建承诺并将其状态更改为resolved
or的对象rejected
。如果您编写自己的函数并希望向调用代码提供承诺,通常会使用延迟。你是价值的生产者。
顾名思义,承诺就是对未来价值的承诺。您可以将回调附加到它以获取该值。承诺是“给予”你的,你是未来价值的接收者。
你不能修改 Promise 的状态。只有创建Promise 的代码才能改变它的状态。
例子:
1. ( produce ) 当你想为你自己的函数提供promise-support时,你使用deferred objects。您计算一个值并希望控制何时解决承诺。
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. ( receive ) 有时你不想创建或传递承诺/值,你想直接使用它们,即你是一些信息的接收者:
$('#my_element').fadeOut().promise().done(function() {
// called when animation is finished
});
当然,所有这些用例也可以混合使用。您的函数可以是值的接收者(例如来自 Ajax 调用)并基于该值计算(产生)不同的值。
相关问题: