描述
示例: apply_async_filters(action_name)
功能: 2.0
用异步方式调用动作钩子
简介: 钩子简介:什么是钩子,为什么使用钩子
::: tip
当你明确知道,这个 filter 可能会存在异步调用的情况时,则应该使用异步过滤器钩子。
作用:这将强制性的顺序依次调用每个添加的钩子,哪怕它们执行时有延时。
注意:在add_filter时,将强制将第一个参数设置为next,第二个则为被过滤参数(其他参数顺移),在add_filter中处理完事件后,必须调用一次 next(过滤后参数)
方法,否则后面的action将不会被执行
约定:为了能够快速识别异步钩子,并在add_filter时明确知道需要使用next参数,在定义过滤器名称时,应在前面明确标注 async: 字样
:::
参数
filter_name
(String) (Required)
过滤器名称
返回
(Promise)
示例
add_filter("async:sample_filter_hook",(next, tobe_filtered, arg1, arg2)=>{
// 这将在第二步执行
console.log(`第二步:${tobe_filtered}`)
tobe_filtered = tobe_filtered + arg2;
next(tobe_filtered)
}, 10)
add_filter("async:sample_filter_hook",(next, tobe_filtered, arg1, arg2)=>{
// 这将在第一步执行,哪怕延迟了1秒,第二步也不会提前执行
setTimeout(()=>{
console.log(`第一步:${tobe_filtered}`)
tobe_filtered = tobe_filtered + arg1;
next(tobe_filtered)
},1000)
}, 3)
add_filter("async:sample_filter_hook",(next, tobe_filtered, arg1, arg2)=>{
// 这将在第三步执行
setTimeout(()=>{
console.log(`第三步:${tobe_filtered}`)
tobe_filtered = tobe_filtered + 'END';
next(tobe_filtered)
},500)
}, 11)
apply_async_filters("async:sample_filter_hook", "被过滤", "参数1", "参数2")
.then(val=>{
console.log("示例异步钩子全部执行完毕,结果:", val)
})