Closed JinliangYan closed 3 weeks ago
immediate 和 ensureImmediate 有点重复的意思,是否考虑合并成一个参数
immediate 和 ensureImmediate 有点重复的意思,是否考虑合并成一个参数
确实,我觉得可以改成这样,消除消除 immediate 和 ensureImmediate 的潜在混淆
immediate 和 ensureImmediate 有点重复的意思,是否考虑合并成一个参数
确实,我觉得可以改成这样
- 将 immediate 和 ensureImmediate 合并为 immediate
- 引入一个新的boolean类型参数 autoRun,当其为 true 时,即可在调用钩子时立即执行请求;否则,在 onLoad 中执行。
再简化一下,不考虑 onLoad 呢
if (options.immediate) {
// 钩子调用时立即执行请求
run()
}
onLoad 会有什么特殊场景需要?
immediate 和 ensureImmediate 有点重复的意思,是否考虑合并成一个参数
确实,我觉得可以改成这样
- 将 immediate 和 ensureImmediate 合并为 immediate
- 引入一个新的boolean类型参数 autoRun,当其为 true 时,即可在调用钩子时立即执行请求;否则,在 onLoad 中执行。
再简化一下,不考虑 onLoad 呢 if (options.immediate) { // 钩子调用时立即执行执行请求 run() } onLoad 会有什么特殊场景需要?
可能在setup生命周期中会有一些必要的变量初始化,这些变量要被请求函数用到,所以要指定到在onLoad生命周期钩子中运行。我的理解是这样的,有误还请指正。
如果有一些必要的变量初始化,这些变量要被请求函数用到的话,不用 immediate 不就行了
如果有一些必要的变量初始化,这些变量要被请求函数用到的话,不用 immediate 不就行了
immediate 默认 false, 然后在 onLoad 里 run(), run 在 onLoad 里的调用位置也可以轻松控制
如果有一些必要的变量初始化,这些变量要被请求函数用到的话,不用 immediate 不就行了
immediate 默认 false, 然后在 onLoad 里 run(), run 在 onLoad 里的调用位置也可以轻松控制
减法确实是最优解,我光顾着加了。我revert一下。
记得基于 base 分支进行 PR
好的
Commit 1: 增加返回值和错误处理
run
函数中增加return func()
,确保run
函数返回的Promise对象的结果由func
函数返回结果决定。run
函数中添加return data.value
,以便请求成功时返回响应数据。此时run
函数返回的Promise状态为resolved,value为data.value
。run
函数中添加throw err
,以便请求失败时抛出错误。此时run
函数返回的Promise状态为rejected,reason则为抛出的异常。在需要同步处理数据或者错误情况下,可以直接访问请求结果,并使用
try...catch
来处理错误。不必监听data和error,从而提高useRequest
钩子的可用性和健壮性。示例:
Commit 2: 增加 ensureImmediate 选项以避免生命周期钩子错误
ensureImmediate
选项,该选项默认为false
,实现在钩子调用时立即执行请求的需求。ensureImmediate
为true
,在钩子调用时立即执行run
函数。immediate
选项在onLoad
中执行请求。这些更改可以避免在
setup
函数之外使用钩子时出现的onLoad
只能在setup
内使用的错误(Lifecycle injection APIs can only be used during execution of setup()
),确保请求能够在钩子调用时立即执行。示例:
修改前
不修改的解决方式
修改后