【发布时间】:2017-07-25 11:07:34
【问题描述】:
这段代码解析三元组(不是那么重要),应该一次返回一个停车位。问题是调用observer.next() 会中断循环,因为它只运行一次。 console.log 也不会被调用。我可能遗漏了一些东西,但是observer.next() 是否有可能打破循环?是有错误还是功能还是我完全错了?
return Observable.create(observer => {
this.fetch.get(datasetUrl).then(response => {
// Get all subjects that are parkings
const parkingTriples = [],
parkings = [],
totalspacesParking = [],
labels = [];
for (let index = 0; index < response.triples.length; index++) {
if (response.triples[index].object === 'http://vocab.datex.org/terms#UrbanParkingSite') {
parkingTriples.push(response.triples[index]);
}
if (response.triples[index].predicate === 'http://vocab.datex.org/terms#parkingNumberOfSpaces') {
totalspacesParking.push(response.triples[index]);
}
if (response.triples[index].predicate === 'http://www.w3.org/2000/01/rdf-schema#label') {
labels.push(response.triples[index]);
}
}
const _parkings = [];
for (let index = 0; index < parkingTriples.length; index++) {
const totalspacesresult = find(totalspacesParking, (o) => {
return o.subject === parkingTriples[index].subject
});
const totalspaces = parseInt(n3.Util.getLiteralValue(totalspacesresult.object), 10);
const labelresult = find(labels, (o) => {
return o.subject === parkingTriples[index].subject
});
const rdfslabel = n3.Util.getLiteralValue(labelresult.object);
const id = rdfslabel.replace(' ', '-').toLowerCase();
observer.next(new Parking(rdfslabel, parkingTriples[index].subject, id, totalspaces, datasetUrl));
console.log(observer);
}
})
})
【问题讨论】:
-
你能简化你的问题/提供一个测试用例吗?一般来说
observer.next()不应该破坏你的代码 -
@MarkvanStraten
for (let index = 0; index < parkingTriples.length; index++) { observer.next(); console.log('I still get hit through'); } -
observer的签名是什么?当使用常规Rx.Subject时,您的简化测试用例将起作用 -
@MarkvanStraten 我更新了源代码
标签: angular typescript rxjs rxjs5