手写一个实现串行的promise函数
时间: 2024-03-17 14:33:22 浏览: 56
当可以,以下是一个简单的串行执行 Promise 的函数实现:
```javascript
function serialPromise(promises) {
let result = Promise.resolve();
promises.forEach(promise => {
result = result.then(() => promise());
});
return result;
}
```
使用示例:
```javascript
// 定义三个异步函数
function asyncFunc1() {
return new Promise(resolve => {
setTimeout(() => {
console.log('Async function 1');
resolve();
}, 1000);
});
}
function asyncFunc2() {
return new Promise(resolve => {
setTimeout(() => {
console.log('Async function 2');
resolve();
}, 2000);
});
}
function asyncFunc3() {
return new Promise(resolve => {
setTimeout(() => {
console.log('Async function 3');
resolve();
}, 1500);
});
}
// 定义一个包含异步函数的数组
const asyncFuncs = [asyncFunc1, asyncFunc2, asyncFunc3];
// 串行执行异步函数
serialPromise(asyncFuncs)
.then(() => {
console.log('All promises completed');
})
.catch(error => {
console.error('Error:', error);
});
```
上述代码中,`serialPromise` 函数接收一个包含异步函数的数组 `promises`。它通过初始化一个 resolved 状态的 Promise 对象 `result`,然后依次使用 `then` 方法将每个异步函数串行执行。最后返回最终的 Promise 对象 `result`。在示例中,我们定义了三个异步函数,并将它们存储在 `asyncFuncs` 数组中。通过调用 `serialPromise(asyncFuncs)`,我们实现了按照顺序依次执行这三个异步函数,输出结果为:
```
Async function 1
Async function 2
Async function 3
All promises completed
```
请注意,上述代码只是一个基本的串行 Promise 实现示例,实际应用中可能需要更多的错误处理和优化。
阅读全文