【发布时间】:2017-06-02 17:04:35
【问题描述】:
一点伪代码解释一下标题:
Subject source = new Subject();
function sendInNewResource(newNumber, anotherVariable) {
source.next(newNumber);
}
const newSource = source
.map((myNumber) => myNumber++);
newSource.subscribe((data) => {
//How can I access myObject here?
});
sendInNewResource(1, {myObject});
我认为伪代码解释了我想做的一些事情。 到目前为止,我已经尝试过扩展 observable,但如果我这样做了,看起来好像我需要覆盖 observable 中的运算符。
我几乎想为活动提供元数据。
我不想将 myObject 向下传递,因为这是一个供外部使用的库,我将在我的代码库中订阅可观察对象,但链接可观察对象将在外部完成。
有人对如何实现这一点有任何想法吗?
对于上下文, 我正在尝试创建一个纯粹的 RxJs http 库,它允许我执行以下操作:
const server$ = RxHttpServer(server)
const api$ = server.filter((request) => request.url.startsWith('/api'));
const apiEndpoint$ = api.map(() => ({
status: 400,
body: 'this is an api endpoint',
headers: {
}
}));
// Inside my library, note the use of the response object that I don't have access to:
apiEndpoint.subscribe((dataToSend) => response.write(dataToSend))
这些对象的内部逻辑和处理已经写好了,只需要返回那个响应对象。
【问题讨论】:
-
我对 RxJS 的了解是有限的,但是你不是必须将 myObject 作为参数传递给 next 吗?
source.next(newNumber, myObject)如果这不可能,你可以做一些参数解构source.next({newNumber, myObject})。 -
@Baruch,这是我在这篇文章中试图避免的一件事,因为我不希望框架的用户必须为他们制作的每条链传递响应。如果你想象一个端点通过平面图调用另一个端点,你会立即失去响应,或者不得不在任何地方使用选择器函数,这对我来说有点破坏可用性:)
-
您是否考虑将您需要的
response对象包装在一个可观察对象中?在这种情况下,您可以将combineLatest和apiEndpoint$和response$一起使用,然后在回调中访问这两个。 -
@atomrc,我想你可以这样做,但我不完全确定你会如何为每个请求创建一个新的 observable
-
响应究竟来自哪里?根据创建方式,您可以创建一个主题并将每个
response提供给该主题。
标签: javascript rxjs reactivex