据我所知,史诗的模式是“行动,行动”。
我使用 MeteorJS,需要遵循调用 Meteor 方法与服务器交互的约定。
看起来像这样:
Meteor.call("<function-name>", ...args, callback)
所以我尝试用这样的史诗来处理异步副作用:
completedSubscribe
只是一个动作创建者:const completedSubscribe = result => {type: SUCCEED, result}
import { Observable } from 'rx'
const fromMeteorCall = Observable.fromNodeCallback(Meteor.call)
const subscriptionsEpic = action$ =>
action$.ofType(REQUEST_SUBSCRIBE)
.mergeMap(action => {
const call$ = fromMeteorCall('subscriptions.insert', action.email)
return call$.map(completedSubscribe)
})
然后我得到错误:Uncaught TypeError: unknown type returned
为了确保我实际返回动作出来,
我尝试调用 subscribe :
call$.subscribe(
function (x) { console.log('onNext: success!'); },
function (e) { console.log('onError: %s', e); },
function () { console.log('onCompleted'); }
);
然后订阅完美,
但史诗仍然无法工作并继续抛出Uncaught TypeError: unknown type returned
.
我认为这可能不是 MeteorJS 的方法问题,这可能发生在从回调创建的其他 observable 中。
也许我误解了redux-observable
or rxjs
,任何意见都会非常有帮助。