手写promise中函数的参数为什么可以是函数形式
时间: 2024-05-04 15:18:13 浏览: 12
在手写 Promise 中,函数的参数可以是函数形式,是因为 Promise 的特性之一:支持链式调用(链式调用也称为方法链接)。Promise 的 then 方法返回的是一个新的 Promise 对象,因此可以继续调用 then 方法或者 catch 方法,形成链式调用。
当我们调用 then 方法时,我们需要传入一个函数作为回调函数,这个回调函数会在 Promise 的状态发生变化时执行。这个回调函数会接收到 Promise 的状态值作为参数,如果状态是 resolved,那么回调函数的第一个参数就是 resolved 的值;如果状态是 rejected,那么回调函数的第一个参数就是 rejected 的原因。因此,当我们使用函数作为 then 方法的参数时,我们就可以在回调函数中对 resolved 或 rejected 的值进行处理,从而实现链式调用的效果。
举个例子,假设我们有一个返回 Promise 对象的函数,我们可以这样写:
```javascript
asyncFunc()
.then(function(result) {
// 对 resolved 的值进行处理
return anotherAsyncFunc(result);
})
.then(function(anotherResult) {
// 对 anotherAsyncFunc 返回的 resolved 值进行处理
})
.catch(function(error) {
// 对 rejected 的值进行处理
});
```
在上面的代码中,我们使用了函数作为 then 方法的参数,然后在回调函数中对 resolved 或 rejected 的值进行处理。这样,我们就实现了链式调用的效果,从而更加方便地处理异步任务的结果。