fle*_*sod 74 jquery promise jquery-deferred
除了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.???
});
Run Code Online (Sandbox Code Playgroud)
Fel*_*ing 123
第一:你不能使用,$.Promise();
因为它不存在.
一个延迟的对象是一个对象,可以创建一个承诺,并改变其状态resolved
或rejected
.如果您编写自己的函数并希望为调用代码提供承诺,则通常会使用延迟.你是价值的生产者.
一个承诺,正如它的名字说,一个关于未来价值的承诺.您可以将回调附加到它以获取该值.承诺是"给予"给你的,你是未来价值的接受者.
您无法修改承诺的状态.只有创建 promise 的代码才能更改其状态.
1.(产品)当您想为自己的功能提供承诺支持时,可以使用延迟对象.您计算一个值并希望控制何时解析承诺.
function callMe() {
var d = new $.Deferred();
setTimeout(function() {
d.resolve('some_value_compute_asynchronously');
}, 1000);
return d.promise();
}
callMe().done(function(value) {
alert(value);
});
Run Code Online (Sandbox Code Playgroud)
2.(转发)如果您正在调用一个本身返回一个promise的函数,那么您不必创建自己的延迟对象.你可以回报这个承诺.在这种情况下,函数不会创建值,而是转发它(种类):
function fetchData() {
// do some configuration here and pass to `$.ajax`
return $.ajax({...});
}
fetchData().done(function(response) {
// ...
});
Run Code Online (Sandbox Code Playgroud)
3.(接收)有时你不想创建或传递promises/values,你想直接使用它们,即你是某些信息的接收者:
$('#my_element').fadeOut().promise().done(function() {
// called when animation is finished
});
Run Code Online (Sandbox Code Playgroud)
当然,所有这些用例也可以混合使用.您的函数可以是值的接收者(例如,来自Ajax调用),并基于此计算(生成)不同的值.
相关问题:
归档时间: |
|
查看次数: |
31452 次 |
最近记录: |