Deferred 类的定义解释
以下是 Deferred 类的定义:
export default class Deferred<T = any> {
public promise: Promise<T | undefined>;
public resolve!: (value?: T | PromiseLike<T>) => void;
public reject!: (reason?: any) => void;
constructor() {
this.promise = new Promise((resolve, reject) => {
this.resolve = resolve;
this.reject = reject;
});
}
}
解释
- 类声明:
- export default class Deferred<T = any>:定义一个泛型类 Deferred,默认类型参数为 any,并导出该类。
- 属性:
- public promise: Promise<T | undefined>:一个 Promise 对象,用于表示异步操作的结果。类型为 Promise<T | undefined>,即 Promise 可以解析为类型 T 或 undefined。
- public resolve!: (value?: T | PromiseLike) => void:一个函数,用于将 Promise 状态设置为已解决,并传递结果。类型为 (value?: T | PromiseLike) => void,即可以传递类型 T 或 PromiseLike 的值。
- public reject!: (reason?: any) => void:一个函数,用于将 Promise 状态设置为已拒绝,并传递错误信息。类型为 (reason?: any) => void,即可以传递任何类型的错误信息。
- 构造函数:
- constructor():构造函数,在实例化 Deferred 类时调用。
- this.promise = new Promise((resolve, reject) => { this.resolve = resolve; this.reject = reject; }):创建一个新的 Promise 对象,并将 resolve 和 reject 函数赋值给类的实例属性 resolve 和 reject。
使用说明
以下是如何使用 Deferred 类来处理异步操作的示例:
function asyncOperation(): Deferred<string> {
const deferred = new Deferred<string>();
setTimeout(() => {
deferred.resolve('Operation completed');
}, 1000);
return deferred;
}
const deferred = asyncOperation();
deferred.promise.then(result => {
console.log(result);
}).catch(error => {
console.error(error);
});
解释
- 创建异步操作函数:
function asyncOperation(): Deferred<string> {
const deferred = new Deferred<string>();
setTimeout(() => {
deferred.resolve('Operation completed');
}, 1000);
return deferred;
}
- asyncOperation 函数创建一个 Deferred 对象,并在异步操作完成后调用 resolve 方法。
- 返回 deferred 对象,以便调用者可以访问 promise 属性。
- 使用异步操作函数:
const deferred = asyncOperation();
deferred.promise.then(result => {
console.log(result);
}).catch(error => {
console.error(error);
});
- 调用 asyncOperation 函数并获取 Deferred 对象。
- 使用 then 方法处理异步操作成功的结果,使用 catch 方法处理异步操作失败的情况。
通过这种方式,你可以手动控制异步操作的完成,并在需要时返回一个 Promise 对象,以便调用者可以使用标准的 Promise 方法处理结果。