我有一个像这样的佐贺(一些伪鳕鱼)。
Saga1调用一个API。根据结果,我需要调用另外两个API。如果所有API均成功,则我调用onSuccess,否则调用onFailure。
该代码似乎可以正常工作,但效果不尽如人意。我面临的问题yield all是,一旦调用了第一笔收益,它就认为saga2和saga3已完成(请参阅saga2 / 3中的评论)。它并没有等待提取结果完成。
我认为部分原因是由于我误解了“完全效果”的含义。但是除此之外,我希望让所有人都等到一切完成。我希望saga2 / 3中的fetch引发的任何异常都可以被saga1中的catch捕获。
saga1(action) {
const { onSuccess, onFailure } = action.payload;
try {
yield fetch...
if(response.some_condition) yield all([
put(saga2()),
put(saga3())
])
onSuccess();
}
catch(e) {
onFailure();
}
}
saga2(action) {
yield put(someaction()) // This yields
yield fetch...
}
saga3(action) {
yield put(someaction()) // This yield
yield fetch...
}
Run Code Online (Sandbox Code Playgroud)
下面的这段代码与我下面关于捕获不起作用的评论有关
action1 () { // action2 is same
try {
yield fetch();
yield put(FINISHED_1);
}
catch(e) {
throw (e);
}
}
saga1() { …Run Code Online (Sandbox Code Playgroud) 使用没有 fp 的普通 lodash,你会做类似的事情
chain(array).map(..).reduce(...).value()
Run Code Online (Sandbox Code Playgroud)
有了 fp,你就可以了
compose(reduce(...), map(...))(array)
Run Code Online (Sandbox Code Playgroud)
我可以让它适用于许多方法(展平、排序、映射),但reduce 除外。
你会期望它(lodash/fp/reduce)像这样工作
reduce((a,b)=>a+b, 0)([1,2,3])
Run Code Online (Sandbox Code Playgroud)
但 fp 版本仍然需要 3 个参数,这对我来说没有意义。所有其他功能对我来说都是这样工作的,除了减少
func(...)(array)
Run Code Online (Sandbox Code Playgroud)
如何使 fpreduce 像其他 fp 函数一样工作:
compose(reduce(...), map(...), flatten(...))(array)
Run Code Online (Sandbox Code Playgroud) 出于某种奇怪的原因获取此错误
TypeError:webpack.CommonsChunkPlugin不是构造函数
其他插件对我来说很好:
new webpack.HotModuleReplacementPlugin(),
new webpack.NoErrorsPlugin(),
// create global variables accessible on server and client
new webpack.DefinePlugin({
Run Code Online (Sandbox Code Playgroud)