jquery基础教程之deferred对象使用方法


在jQuery中,Deferred对象提供了一种强大的方法来处理异步操作,如AJAX请求。Deferred对象代表了一个最终会完成或失败的操作及其结果。这里是一个基础的教程,展示如何使用jQuery的Deferred对象。

### 1. 创建Deferred对象

首先,你需要创建一个Deferred对象。这可以通过调用jQuery的`$.Deferred()`方法来完成。


var deferred = $.Deferred();

### 2. 解决Deferred对象

一旦异步操作完成,你可以通过调用Deferred对象的`resolve()`或`reject()`方法来分别表示操作成功或失败。


// 假设这是一个异步操作
setTimeout(function() {
    // 假设异步操作成功
    deferred.resolve("操作成功完成!");
    // 或者,如果操作失败
    // deferred.reject("操作失败!");
}, 1000);

### 3. 使用`.then()`处理结果

你可以使用Deferred对象的`.then()`方法来注册当Deferred对象解决(resolve)或拒绝(reject)时调用的回调函数。`.then()`方法接受两个可选参数:第一个是当Deferred对象解决时调用的函数,第二个是当Deferred对象拒绝时调用的函数。


deferred.then(
    function(result) {
        // 当Deferred对象解决时调用
        console.log(result); // 输出: 操作成功完成!
    },
    function(error) {
        // 当Deferred对象拒绝时调用
        console.log(error); // 如果操作失败,这里会输出错误信息
    }
);

### 4. 使用`.done()`和`.fail()`

作为`.then()`的替代,你也可以使用`.done()`来注册解决时的回调函数,使用`.fail()`来注册拒绝时的回调函数。


deferred.done(function(result) {
    console.log(result); // 输出: 操作成功完成!
}).fail(function(error) {
    console.log(error); // 如果操作失败,这里会输出错误信息
});

### 5. 链式调用

Deferred对象支持链式调用,这使得你可以将多个异步操作串联起来。


var anotherDeferred = $.Deferred();

// 假设这是另一个异步操作
setTimeout(function() {
    anotherDeferred.resolve("第二个操作成功完成!");
}, 1500);

deferred.then(function() {
    return anotherDeferred.promise(); // 返回另一个Deferred对象的promise
}).done(function(result) {
    console.log(result); // 输出: 第二个操作成功完成!
});

### 总结

jQuery的Deferred对象提供了一种优雅的方式来处理异步操作及其结果。通过使用`.then()`、`.done()`、`.fail()`等方法,你可以轻松地注册回调函数来处理异步操作的成功或失败情况。此外,Deferred对象还支持链式调用,使得你可以将多个异步操作串联起来,从而编写出更加清晰和易于维护的代码。