我有一系列需要按顺序触发的 observable。一旦发生错误,我需要捕获错误,记录它并继续观察。
目前,一旦发生错误,观察者就会停止。观察者必须继续并且不会因错误而重新启动或完成。
import * as Rx from "rxjs";
const source = [
Rx.Observable.from("1").delay(200),
Rx.Observable.from("2").delay(150),
Rx.Observable.throw("error"),
Rx.Observable.from("3").delay(124),
Rx.Observable.from("4").delay(201),
];
let sSource = Rx.Observable.concat(...source);
sSource.subscribe((v) => {console.log(v)}, (e) => {console.log(e)});
Run Code Online (Sandbox Code Playgroud)
电流输出:
1
2
error
Run Code Online (Sandbox Code Playgroud)
预期输出:
1
2
error
3
4
Run Code Online (Sandbox Code Playgroud)
我们能想出的唯一解决方案是预先循环遍历sourceobservable 并单独向它们添加 catch 处理程序,然后一旦发生错误,它就会得到正确处理,观察者可以继续操作,而无需完成整个串联的 observable。
我们觉得应该有一个更优雅的解决方案。如果需要,我会发布我们目前的解决方案。
我正在尝试使用包含数字元素的一维数组制作基本折线图。
图表.html
<svg id="svg"></svg>
Run Code Online (Sandbox Code Playgroud)
图.js
lineData = [10,15,20,25,30,35,40,35,30,25,20,15,10];
let svg = D3.select("#svg").attr('width', width).attr('height', height);
let chart = svg.append('g').classed('display', true).attr('transform', 'translate(' + this.padding.l + ', ' + this.padding.t + ')');
let x = D3.scaleLinear().domain([0, lineData.length]).range([0,width]);
let y = D3.scaleLinear().domain([0, D3.max(lineData)]).range([height, 0]);
let line = D3.line().x((d,i) => {return x(i);}).y((d) => {return y(d);}).curve();
chart.selectAll('.line').data([lineData]).enter().append('path').classed('line', true).attr('stroke', 'red').attr('d', (d) => {return line(d);});
Run Code Online (Sandbox Code Playgroud)
我不断收到此错误: Error: <path> attribute d: Expected moveto path command ('M' or 'm'), "[object Object]".
----------更新(未简化的角度组件)---------
条形曲线图.component.ts
import {Component, Input, OnInit, ViewChild} from '@angular/core'; …Run Code Online (Sandbox Code Playgroud) 我正忙着在Angular4中使用D3绘制条形图.
// Enter Phase
this.chart.selectAll('.bar')
.data(this.barData)
.enter()
.append('rect')
.attr('class', 'bar');
// Update Phase
let bars = this.chart.selectAll('.bar').transition()
.attr('x', (d) => {return this.x(this.parseTime(d.date.toUpperCase()));})
.attr('y', (d) => {return this.y(d.point)})
.attr('width', 15)
.attr('height', (d) => {return this.charDimensions.height - this.y(d.point);})
.on("mouseover", function (d) {D3.select(this).style('opacity', 0.5);})
.on("mouseout", function (d) {D3.select(this).style('opacity', 1);})
.on("click", (d) => {this.barClicked.emit(d);});
// Exit phase
this.chart.selectAll('.bar')
.data(this.barData)
.exit().remove();
Run Code Online (Sandbox Code Playgroud)
在我的绘图方法中,当我打电话时,animate()我得到一个错误:Error: unknown type: mouseover.这是有道理的,因为我可能试图调用on("<event>")D3返回的转换,转换效果就在那里,但是,转换后的所有内容都会中断,即:动画有效,但是绘图被打破了.
但是,当我尝试执行以下操作时:
// Update Phase
let bars = this.chart.selectAll('.bar');
bars.transition();
bars.attr('x', (d) => {return this.x(this.parseTime(d.date.toUpperCase()));}) …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我正在构建的简单网页上实现基本的 HTML5 视频播放。
真的,没有什么花哨的东西。甚至这个例子也不起作用。
<link href="//vjs.zencdn.net/5.4.6/video-js.min.css" rel="stylesheet">
<script src="//vjs.zencdn.net/5.4.6/video.min.js"></script>
<script src="//vjs.zencdn.net/ie8/1.1.1/videojs-ie8.min.js"></script>
<video id="example_video_1" class="video-js vjs-default-skin"
controls preload="auto" width="640" height="264"
poster="http://video-js.zencoder.com/oceans-clip.png"
data-setup='{"example_option":true}'>
<source src="http://video-js.zencoder.com/oceans-clip.mp4" type="video/mp4" />
<source src="http://video-js.zencoder.com/oceans-clip.webm" type="video/webm" />
<source src="http://video-js.zencoder.com/oceans-clip.ogv" type="video/ogg" />
<p class="vjs-no-js">To view this video please enable JavaScript, and consider upgrading to a web browser that <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a></p>
</video>
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
The media could not be loaded, either because the server or network failed or because the format is not supported
我是否缺少有关 IOS 和 HTML5 …
javascript ×3
d3.js ×2
angular ×1
css3 ×1
html ×1
html5-video ×1
ios ×1
iphone ×1
jquery ×1
rxjs ×1
rxjs5 ×1
rxjs6 ×1
typescript ×1