手写promise.catch
时间: 2024-09-02 21:01:08 浏览: 92
手写Promise的`.catch`方法通常用于处理Promise链中的错误情况。在JavaScript中,当你有一个返回Promise的对象,你可以添加`.catch`方法来捕获并处理这个Promise在执行过程中可能出现的错误。当原Promise拒绝(即抛出异常),`.catch`会接收到那个错误,并允许你在回调函数中处理它,使得程序不会因为未被捕获的错误而中断。
以下是一个简单的例子:
```javascript
function myFunction() {
return new Promise((resolve, reject) => {
// 模拟可能会失败的操作
if (Math.random() > 0.5) {
reject(new Error('Something went wrong'));
} else {
resolve('Success!');
}
});
}
myFunction()
.then(result => console.log(result)) // 成功时的处理
.catch(error => console.error('Error caught:', error)); // 错误时的处理
```
在这个例子中,如果`myFunction`内部操作失败,`reject`会被调用,然后`.catch`会捕获到这个错误并打印出来。
相关问题
手写Promise.all
Promise.all() 方法接收一个 Promise 对象的数组作为参数,返回一个新的 Promise 对象。当数组中所有的 Promise 对象都成功时,新 Promise 对象才会成功;只要任何一个 Promise 对象失败,新 Promise 对象就会失败。
以下是一个手写的 Promise.all() 方法的实现:
```javascript
function promiseAll(promises) {
return new Promise((resolve, reject) => {
let results = new Array(promises.length);
let resolvedCount = 0;
promises.forEach((promise, index) => {
promise.then(result => {
results[index] = result;
resolvedCount++;
if (resolvedCount === promises.length) {
resolve(results);
}
}).catch(error => {
reject(error);
});
});
});
}
```
这个实现中,我们首先创建了一个新的 Promise 对象,并在该 Promise 对象中使用一个数组来存储每个 Promise 对象的结果。我们还定义了一个计数器 resolvedCount,用于跟踪已经解决的 Promise 对象的数量。
然后,我们使用 forEach() 方法遍历传递给 promiseAll() 方法的 Promise 对象数组,并为每个 Promise 对象设置一个 then() 方法来处理成功的情况。在每个成功的 then() 回调函数中,我们将该 Promise 对象的结果存储在结果数组中,并将 resolvedCount 计数器增加 1。如果 resolvedCount 的值等于 Promise 对象的数组的长度,则意味着所有 Promise 对象都已成功解决,我们就可以使用 resolve() 方法来解决新的 Promise 对象,并传递结果数组作为参数。
如果任何一个 Promise 对象失败,则我们使用 catch() 方法处理错误情况,并使用 reject() 方法拒绝新的 Promise 对象。
手写promise.all
下面是一个简单的手写 Promise.all 实现:
```javascript
function promiseAll(promises) {
return new Promise((resolve, reject) => {
let results = [];
let count = 0;
promises.forEach((promise, index) => {
Promise.resolve(promise).then((result) => {
results[index] = result;
count++;
if (count === promises.length) {
resolve(results);
}
}).catch((error) => {
reject(error);
});
});
});
}
```
这个实现创建了一个新的 Promise,通过遍历 promises 数组,将每个 promise 转为一个 resolved 状态的 promise,并在每个 resolved promise 返回结果时保存结果到 results 数组中。当所有的 promise 都返回结果时,将 results 数组作为 Promise.all 的返回值 resolve。如果其中一个 promise 出现错误,则直接 reject。
阅读全文