gpt4 book ai didi

javascript - 将 json 数据加载到 CycleJS 应用程序中

转载 作者:行者123 更新时间:2023-11-29 14:42:37 24 4
gpt4 key购买 nike

我正在努力研究 CycleJS,但我被卡住了!我正在尝试将一个小应用程序放在一起加载一个包含对象数组的 JSON 文件,但我无法让该应用程序执行 http 请求

到目前为止在我的代码中

'use strict';

import Rx from 'rx';
import Cycle from '@cycle/core';
import {h, makeDOMDriver} from '@cycle/dom';
import {makeHTTPDriver} from '@cycle/http';

function intent(DOM) {
return {
edit: DOM.select('div')
.events('click')
.map(evt => evt.target.value),
add: DOM.select('div')
.events('click')
.map(evt => evt.target.value)
};
}

function model(actions, response) {
return response
}

function view(state) {
return state.map(item => {
h('div', [
item.map(todo => h('div', todo.title))
])
});
}

function main(sources) {
const URL = 'http://localhost:3000/js/planinator/data.json';

let response = sources.HTTP
.mergeAll()
.map(res => res.body)
.startWith([]);

const actions = intent(sources.DOM);
const state = model(actions, response);

return {
DOM: view(state),
HTTP: Rx.Observable.of(URL)
}
}

Cycle.run(main, {
DOM: makeDOMDriver('#appmount'),
HTTP: makeHTTPDriver()
});

我想要实现的是;现在加载 JSON 数据并将其呈现为 div 标签。

当我在 chrome 中运行代码时,我在控制台中得到了这个

bundle.js:14182 TypeError: Cannot read property 'subscribe' of undefined(…)

我已经检查了 stackoverflow 发现的问题,但他们没有进一步帮助我

最佳答案

欢迎使用 Cycle.js :)

我注意到的第一个问题是,HTTP 驱动程序将首先期待一个 http 请求的 Observable,此时您只是向它传递一个 url 字符串。这可以通过使用 Rx 的 Rx.Observable.of(URL)

将 URL 包装在 Observable 中来完成
function main(sources) {
...
return {
...
HTTP: Rx.Observable.of(URL)
}
}

接下来,我注意到您的请求(实际上是您的响应!)有点误用了 HTTP 驱动程序。 HTTP 驱动程序将一个高阶 Observable 返回给 main,或者换句话说,它返回一个包含其他 observable 的 Observable。这可以通过 mergeAll()switch() 轻松纠正。 mergeAll()switch() 有效地采用高阶可观察对象,并将其“扁平化”为包含“内部”可观察对象事件的可观察对象。

let response = sources.HTTP
.mergeAll()
.filter(....)
.map(....)
.startWith([])

这两种方法之间的区别很微妙,但非常重要。mergeAll() 的并发度为 Infinity。那有什么意思? mergeAll() 将获取所有内部可观察对象并订阅它们,并将它们的事件推送到包含的可观察对象,同时从不取消订阅。 switch() 类似,但并发度为 1。它只会订阅最新的内部 observable,同时处理之前的。

我不能确定这会回答您所有的问题,但我希望它至少能让您朝着正确的方向开始! :)

关于javascript - 将 json 数据加载到 CycleJS 应用程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36719826/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com