手写promise.catch
时间: 2024-09-02 09:01:08 浏览: 59
手写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.try方法
手写Promise.try方法的目的是在执行一个函数时处理可能的异常,并返回一个Promise对象。下面是一个手写Promise.try方法的示例代码:
```javascript
Promise.try = function(fn) {
return new Promise((resolve, reject) => {
try {
resolve(fn());
} catch (error) {
reject(error);
}
});
};
```
上述代码中,我们定义了一个静态的Promise.try方法,它接收一个函数作为参数。在这个方法内部,我们使用try-catch语句来捕获函数执行过程中可能的异常。如果函数执行成功,我们使用resolve方法将结果传递给Promise对象;如果函数执行出错,我们使用reject方法将错误传递给Promise对象。
使用Promise.try方法时,可以像下面这样调用:
```javascript
Promise.try(() => {
// 在这里执行可能抛出异常的代码
return someValue; // 返回成功的结果
}).then(result => {
// 处理成功的结果
}).catch(error => {
// 处理异常情况
});
```
在上述示例中,我们将需要执行的代码放在Promise.try的回调函数中,并通过return语句返回成功的结果。接着可以使用.then方法处理成功的结果,或使用.catch方法处理异常情况。
这就是手写Promise.try方法的实现和用法。它可以帮助我们在执行函数时处理异常,并返回一个Promise对象,以便进行后续的操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [手写Promise.all](https://blog.csdn.net/weixin_43376417/article/details/126561767)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *3* [手写Promise.then方法](https://blog.csdn.net/weixin_43484007/article/details/125179681)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
手写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。