手写promise 函数
时间: 2023-09-12 09:02:42 浏览: 47
好的,以下是一个简单的手写 Promise 函数实现:
```js
function MyPromise(fn) {
var self = this;
self.value = null;
self.error = null;
self.onFulfilled = null;
self.onRejected = null;
function resolve(value) {
self.value = value;
self.onFulfilled(self.value);
}
function reject(error) {
self.error = error;
self.onRejected(self.error);
}
fn(resolve, reject);
}
MyPromise.prototype.then = function(onFulfilled, onRejected) {
var self = this;
self.onFulfilled = onFulfilled;
self.onRejected = onRejected;
};
```
这个 Promise 实现仅仅是一个简单的演示,还有很多需要完善的地方,比如处理异步操作、链式调用、错误处理等等。
相关问题
手写promise函数
好的,关于手写实现Promise函数,其实Promise是一种异步编程的解决方案,它的本质是对回调函数的封装,可以更加优雅和简洁地处理异步操作。以下是一个简单的手写Promise函数示例:
```javascript
function MyPromise(fn) {
var self = this;
self.status = 'pending';
self.value = null;
self.reason = null;
self.onFulfilledCallbacks = [];
self.onRejectedCallbacks = [];
function resolve(value) {
if (self.status === 'pending') {
self.status = 'fulfilled';
self.value = value;
self.onFulfilledCallbacks.forEach(function(callback) {
callback(self.value);
});
}
}
function reject(reason) {
if (self.status === 'pending') {
self.status = 'rejected';
self.reason = reason;
self.onRejectedCallbacks.forEach(function(callback) {
callback(self.reason);
});
}
}
try {
fn(resolve, reject);
} catch (e) {
reject(e);
}
}
MyPromise.prototype.then = function(onFulfilled, onRejected) {
var self = this;
return new MyPromise(function(resolve, reject) {
if (self.status === 'fulfilled') {
try {
var x = onFulfilled(self.value);
resolve(x);
} catch (e) {
reject(e);
}
} else if (self.status === 'rejected') {
try {
var x = onRejected(self.reason);
resolve(x);
} catch (e) {
reject(e);
}
} else if (self.status === 'pending') {
self.onFulfilledCallbacks.push(function(value) {
try {
var x = onFulfilled(value);
resolve(x);
} catch (e) {
reject(e);
}
});
self.onRejectedCallbacks.push(function(reason) {
try {
var x = onRejected(reason);
resolve(x);
} catch (e) {
reject(e);
}
});
}
});
}
```
以上就是一个简单的手写Promise函数的实现,它是基于回调函数的封装实现的异步编程方案。
手写promise面试
手写Promise面试是一个通过手写代码来展示对Promise的理解和掌握程度的面试环节。在面试中,面试官往往会要求面试者用纸笔手写一个简单的Promise实现,或者是解答一些与Promise相关的问题。
首先,面试者需要熟悉Promise的基本概念和用法,包括Promise的三种状态(pending、fulfilled、rejected)、then方法的使用,以及Promise的错误处理等内容。
其次,在手写Promise的环节中,面试者需要能够清晰地表达出Promise的基本结构和实现方式,包括Promise的构造函数、resolve和reject方法的定义,以及then方法和catch方法的实现。
除此之外,面试者还需要展示出对Promise链式调用和异步操作的处理能力,以及如何正确地处理Promise中的错误和异常情况。
总的来说,手写Promise面试是一个考察面试者对Promise的理解程度、编码能力和解决问题能力的环节,通过这个环节,面试官可以更直观地了解面试者对Promise的掌握程度和工作实际能力。因此,在准备手写Promise面试时,面试者需要通过大量的练习和理解,确保自己能够熟练地手写出一个符合Promise规范的简单实现,并对相关问题进行正确的解答。