小编Qwe*_*tiy的帖子

重试后怎么抓?

我想get在发生错误时再次尝试重试请求几次,但如果所有尝试都失败,则执行错误处理程序.

以下代码重试请求,但catch永远不会执行.我该如何解决?

import {Response, Http} from '@angular/http';
import {Observable} from 'rxjs/Rx';
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/map';
Run Code Online (Sandbox Code Playgroud)
this.http.get("/api/getData").map(data => {
  console.log('get')
  return data.json()
})
.retryWhen(err => {
  console.log('retry')
  return err.delay(1000).take(5)
})
.catch(err => {
  console.log('catch')
  this.handleHttpError(err)
  return err
})
.subscribe(data => {
  console.log('subscribe')
  console.log(data)
})
Run Code Online (Sandbox Code Playgroud)

javascript observable rxjs angular

6
推荐指数
1
解决办法
1875
查看次数

如何从 fs.Dirent 获取类型?

我可以打电话

fs.readdirSync("C:\\", { withFileTypes: true })
Run Code Online (Sandbox Code Playgroud)

并获得数组fs.Dirent,但它们看起来像

> fs.readdirSync("C:\\", { withFileTypes: true })[32]
Dirent { name: 'Windows', [Symbol(type)]: 2 }
> fs.readdirSync("C:\\", { withFileTypes: true })[21]
Dirent { name: 'pagefile.sys', [Symbol(type)]: 1 }
> fs.readdirSync("C:\\", { withFileTypes: true })[10]
Dirent { name: 'Documents and Settings', [Symbol(type)]: 3 }
Run Code Online (Sandbox Code Playgroud)

所以有一个名称和类型,但类型隐藏在 Symbol(type) 下,我找不到任何信息如何从那里获取它。

当然,我可以使用像

> x = fs.readdirSync("C:\\", { withFileTypes: true })[10]
Dirent { name: 'DoYourData iCloud Backup', [Symbol(type)]: 2 }
> x[Object.getOwnPropertySymbols(x)[0]]
3
Run Code Online (Sandbox Code Playgroud)

但这似乎很奇怪。

如果它是出于目的而隐藏的,并且除了名称之外没有任何公共内容,那么我不明白为什么我们在选项中使用特殊标志来获取对象而不是简单的字符串。

截屏

javascript fs node.js

6
推荐指数
2
解决办法
1898
查看次数

将类型推到元组的末尾

我可以在元组的开头添加元素,或者从那里删除它

type ShiftTuple<T extends any[]> = ((...t: T) => void) extends ((x: infer X, ...r: infer R) => void) ? R : never;
type UnshiftTuple<X, T extends any[]> = ((x: X, ...t: T) => void) extends ((...r: infer R) => void) ? R : never;
Run Code Online (Sandbox Code Playgroud)

但是我很难用最后一个元素而不是第一个元素做同样的事情。

即使我写了函数

function f<X, Z extends any[]>(x: X, ...args: Z) {
  return [...args, x]
}
Run Code Online (Sandbox Code Playgroud)

打字稿说它返回any[].

有没有办法将新类型推入元组的末尾(不支持)

export type PushTuple<T extends any[], X> = [...T, X];
Run Code Online (Sandbox Code Playgroud)

tuples typescript

6
推荐指数
1
解决办法
487
查看次数

选项卡关闭时清理 IndexedDB

我需要保留一些数据,indexedDB因为sessionStorage数据量超过 5\xc2\xa0MB。

\n\n

我对清理策略感到困惑,因为在页面重新加载或导航到其他页面的情况下,我需要保留这些数据,但如果用户关闭浏览器选项卡,我想删除它以保存位置。

\n\n

我怎样才能做到这一点?至少需要它在 Chrome 中工作。

\n

javascript google-chrome session-storage indexeddb

6
推荐指数
1
解决办法
3266
查看次数

如何将按钮内的图标和文本居中?

如何在不指定大小以对齐项目的情况下将按钮内的图标和文本居中?

.ico {
  background: url(https://www.gravatar.com/avatar/cbfaff96665b7567defe1b34a883db8b?s=32&d=identicon&r=PG);
  width: 32px;
  height: 32px;
  display: inline-block;
}
Run Code Online (Sandbox Code Playgroud)
<button>
  <span class=ico></span>
  And some text
</button>
Run Code Online (Sandbox Code Playgroud)

html css

5
推荐指数
1
解决办法
4884
查看次数

如何在页面上停止脚本执行?

我在Chrome中打开了一个随机网页.我正在使用启用的javascript打开它,因为我需要执行一些脚本.

从某些时刻开始我想停止脚本执行,因此不应该运行任何计时器或事件处理程序.使用无限循环的时候不行,因为我希望页面能够响应.

我怎么能做到这一点?

以下代码部分完成了我的需要

document.body.outerHTML = document.body.outerHTML
for(t=setTimeout(()=>{}); t; --t) clearTimeout(t)
Run Code Online (Sandbox Code Playgroud)

但:

  1. 事件监听器document和ajax回调将继续存在
  2. 这会导致解析html,因此可以通过解析来更改一些无效标记

另外,我希望有一些方法可以通过devtools实现,而无需实际与页面代码进行交互.

PS:如果我需要使用其他浏览器,那没关系.

javascript debugging google-chrome google-chrome-devtools

5
推荐指数
1
解决办法
4751
查看次数

执行休息; 在SCSS中

我有一些代码.

帕格:

div(data-counter="100")
Run Code Online (Sandbox Code Playgroud)

SCSS:

$start: 100;
$end: 20;

div:before {
  content: attr(data-counter);
  animation: countdown 10s steps(1, start) forwards;
}

@keyframes countdown {
  @for $i from 1 through $start { 
    @if $i == 50 {
      100% {
        content: 'Stop';
      }
    } @else {
      #{$i}% {
        content: '#{($start - $i)}';
      }
    }
  } 
}
Run Code Online (Sandbox Code Playgroud)

问题是计数器计数从100何时到达50,计数器将停止 - 100% {content: 'Stop'; }动画将结束(现在它继续49% {content: '51';} 100% {content: 'Stop';} 51% {content: '49';}).

问题:break;在js中是否存在像scss这样的东西?

codepen

PS: @break;不能按预期工作. …

css sass

5
推荐指数
1
解决办法
95
查看次数

逗号运算符重置此项

在以下代码中

var x = { f: function () { return this === window } };
(0, x.f)();
Run Code Online (Sandbox Code Playgroud)

我正在使用构造(0, x.f)来运行this等于Window的函数(或在严格模式下未定义).

但打字稿说

逗号运算符的左侧未使用且没有副作用.

但实际上this我正在调用的函数有副作用.

我该如何编写代码来消除此错误消息?

typescript

5
推荐指数
1
解决办法
796
查看次数

如何从SVG路径的交叉点找到新路径(形状)?

我需要相交 2 条 SVG 路径并获得与它们相交的路径。

它应该在浏览器或 Node.js 中工作(它们中的任何一个,而不是两者)。
我需要交集,使用的clip-path不行。
如果由于某种原因交集会使用transform它就可以了(我会自己删除它)。

我认为有一个图书馆,但我发现只有


例如交叉以下路径:

M 24.379464,51.504463 23.434524,23.156249 38.742559,12.572916 c 0,0 29.860118,-9.0714281 17.00893,0.755953 -12.851191,9.82738 13.229166,19.465774 13.229166,19.465774 z
m 32.883928,0.28869028 c 0,0 -15.686011,1.51190452 -8.504463,7.18154712 7.181546,5.6696426 50.270836,30.0491076 26.458332,42.3333336 -23.8125,12.284226 47.058036,14.174107 47.058036,14.174107 z
Run Code Online (Sandbox Code Playgroud)

我想得到类似的东西:

M 43.943359 11.123047 C 40.995759 11.900151 38.742188 12.572266 38.742188 12.572266 L 35.236328 14.996094 C 44.091432999999995 21.21816 55.052161 29.822765 57.455078 37.628906 L 66.939453 33.650391 63.632812 30.410156 …
Run Code Online (Sandbox Code Playgroud)

javascript svg node.js snap.svg

5
推荐指数
1
解决办法
2159
查看次数

在 React 中处理真正的“change”事件

在 javascript 中,如果输入失去焦点或用户使用向上或向下功能,但在正常打字时不会发生input这种change情况。type="number"

document.querySelector("input").addEventListener("change", e => {
  console.log(e.type, e.target.value)
})
Run Code Online (Sandbox Code Playgroud)
<input type="number" step="0.01"> <button>&nbsp;</button>
Run Code Online (Sandbox Code Playgroud)

但是当我使用 React 时,它会逐个替换打字时发生的事件changeinput

function App() {
  const [val, setVal] = React.useState("")
  
  function onChange(e) {
    console.log(e.type, e.nativeEvent.type, e.target.value)
    setVal(e.target.value)
  }
  
  return <input type="number" step="0.01" value={val} onChange={onChange} />
}

ReactDOM.render(<App />, document.getElementById("app"))
Run Code Online (Sandbox Code Playgroud)
<script crossorigin src="//unpkg.com/react@17/umd/react.production.min.js"></script>
<script crossorigin src="//unpkg.com/react-dom@17/umd/react-dom.production.min.js"></script>
<span id="app"></span> <button>&nbsp;</button>
Run Code Online (Sandbox Code Playgroud)

我需要处理change打字时不会发生的正常事件。
我怎样才能在反应中做到这一点?

PS:片段中的按钮是您可以tabinput.

是的,“输入时会导致编辑值出现问题”部分确实有一点帮助,尽管对我来说这似乎是代码味道,也许是 XY 问题。onChange你能分享一下在正常的 React 方式下使用时输入内容是如何导致问题的吗?

我不想完全拒绝使用它,我只是想两者都使用。

这是一个有问题的示例:

  • 小数部分不能使用退格键(除非 …

javascript onchange dom-events reactjs

5
推荐指数
1
解决办法
2718
查看次数