创建promise的构造函数,该构造函数有一个参数,为这个函数再创建两个参数,来改变promise的状态,让自定义对象能模拟实现promise的功能,包括:1.三种状态:pending-等待,resolve-成功,reject-失败,其中最开始为pending状态,并且一旦成功或者失败,promise的状态便不会再改变。2.then函数,它有两个参数,full表示当状态变为成功时要执行的回调函数,fail表示当状态失败时要执行的回调函数。3.实现resolve和reject函数
时间: 2024-02-23 17:01:50 浏览: 62
JavaScript基础教程之如何实现一个简单的promise
好的,我理解了你的问题。下面是一个简单的实现:
```javascript
function MyPromise(executor) {
var self = this;
self.status = 'pending'; // 初始状态
self.value = undefined; // 成功时的返回值
self.reason = undefined; // 失败时的原因
function resolve(value) { // 成功时的回调函数
if (self.status === 'pending') {
self.status = 'resolved'; // 改变状态
self.value = value; // 保存返回值
}
}
function reject(reason) { // 失败时的回调函数
if (self.status === 'pending') {
self.status = 'rejected'; // 改变状态
self.reason = reason; // 保存失败原因
}
}
try {
executor(resolve, reject); // 开始执行
} catch (e) {
reject(e); // 出错时改为失败状态
}
}
MyPromise.prototype.then = function (onFullfilled, onRejected) {
var self = this;
if (self.status === 'resolved') {
onFullfilled(self.value);
}
if (self.status === 'rejected') {
onRejected(self.reason);
}
};
// 测试代码
var p = new MyPromise(function (resolve, reject) {
setTimeout(function () {
resolve('Hello, world!'); // 改变状态为成功
}, 2000);
});
p.then(function (value) {
console.log(value); // 输出:Hello, world!
}, function (reason) {
console.log(reason);
});
```
以上是一个简单的自定义Promise实现,只实现了resolve和reject函数,并且只能处理异步任务。如果需要完整的Promise实现,还需要考虑链式调用、多个then函数的处理、catch函数的实现等等。
阅读全文