Javascript 等待效应器中的效果

Javascript 等待效应器中的效果,javascript,effector,Javascript,Effector,效应器是否有更多的“本机”方式而不是waitForTask 从“效应器”导入{createEffect} const runTestTask=createEffect({ 异步处理程序(名称){ //模拟长任务 等待新的承诺(resolve=>setTimeout(resolve,10000)); 返回{name}; } }); 函数waitForTask(cb){ if(runTestTask.pending.getState()){ const unsub=runTestTask.doneD

效应器是否有更多的“本机”方式而不是
waitForTask

从“效应器”导入{createEffect}
const runTestTask=createEffect({
异步处理程序(名称){
//模拟长任务
等待新的承诺(resolve=>setTimeout(resolve,10000));
返回{name};
}
});
函数waitForTask(cb){
if(runTestTask.pending.getState()){
const unsub=runTestTask.doneData.watch(()=>{
不明嫌犯();
cb({…});
});
}否则{
cb({…});
}
}

是的,效果本身有四个字段 .done-处理程序解析后立即发出的事件 .fail-处理程序被拒绝后立即发出的事件 .finally-处理程序完成后立即发出的事件

如果我们讨论的是数据流,最简单的情况如下:

const $testStore = createStore({})
*here is your effect snippet*
$testStore.on(runTestTask.done, (prevState, payload) => payload)


我写了一个解决常见误解的方法,如果任务在一段时间前执行,我需要返回当前状态(已履行承诺),如果任务仍在执行,则返回
done
事件的承诺。如果需要已履行承诺的最后一个状态,则需要使用sample(
source
字段),如``sample({source:runTestTask.done,//上次触发
.done
clock:someEvent,//触发示例fn的事件?:SomeFn,//用于处理来自源和时钟的有效负载的组合函数,目标:SomeUnit//存储事件效果(例如showFailPopup)})
forward({
from: runTestTask.fail,
to: showFailPopup
})