小编fri*_*doo的帖子

将承诺转换为可观察的

我试图围绕着可观察者.我喜欢observables解决开发和可读性问题的方式.在我读到的时候,好处是巨大的.

关于HTTP和集合的可观察量似乎是直截了当的.我怎样才能将这样的东西转换为可观察的模式.

这是来自我的服务组件,用于提供身份验证.我希望它能像Angular2中的其他HTTP服务一样工作 - 支持数据,错误和完成处理程序.

firebase.auth().createUserWithEmailAndPassword(email, password)
  .then(function(firebaseUser) {
    // do something to update your UI component
    // pass user object to UI component
  })
  .catch(function(error) {
    // Handle Errors here.
    var errorCode = error.code;
    var errorMessage = error.message;
    // ...
  });
Run Code Online (Sandbox Code Playgroud)

这里的任何帮助将不胜感激.我唯一的替代解决方案是创建EventEmitters.但我想这是在服务部门做事的一种可怕方式

rxjs firebase firebase-authentication angular

162
推荐指数
4
解决办法
10万
查看次数

可暂停的RxJS流

我有一个带有单个按钮的简单组件,该按钮可以启动和暂停由RxJS计时器生成的数字流。

import { Component, OnInit } from '@angular/core';
import { BehaviorSubject, Observable, timer, merge } from 'rxjs';
import { filter, bufferToggle, windowToggle, mergeMap, mergeAll, share } from 'rxjs/operators';

@Component({
  selector: 'my-app',
  template: `<button (click)="toggle()">{{ (active$ | async) ? 'Pause' : 'Play' }}</button>`,
  styleUrls: [ './app.component.css' ]
})
export class AppComponent implements OnInit {
  active$ = new BehaviorSubject<boolean>(true);

  ngOnInit(): void {
    const on$ = this.active$.pipe(filter(v => v));
    const off$ = this.active$.pipe(filter(v => !v));

    const stream$ = timer(500, 500).pipe(share());

    const out$ = …
Run Code Online (Sandbox Code Playgroud)

javascript rxjs angular

19
推荐指数
2
解决办法
575
查看次数

完成后n秒重复请求(Angular2 - http.get)

我玩了angular2并且在一段时间后卡住了.

使用http.get对于单个请求工作正常,但我想每4秒轮询一次实时数据,经过一段时间的修补并阅读了很多反应性的东西后我最终得到:

Observable.timer(0,4000)
  .flatMap(
    () => this._http.get(this._url)
       .share()
       .map(this.extractData)
       .catch(this.handleError)
  )
  .share(); 
Run Code Online (Sandbox Code Playgroud)

在-observable发出请求结果后,是否有一种简单的方法可以启动(4秒)间隔http.get?(或者我最终会在可观察到的地狱?)

我想要的时间表:

Time(s): 0 - - - - - 1 - - - - - 2 - - - - - 3 - - - - - 4 - - - - - 5 - - - - - 6
Action:  Request - - Response - - - - - - - - - - - - - - - …
Run Code Online (Sandbox Code Playgroud)

javascript observable rxjs reactivex angular

12
推荐指数
1
解决办法
6904
查看次数

Angular 6 ag-grid单元格渲染器单击功能

所以我试图设置ag-grid,我不能让一件事情起作用.我希望有一个列是行动.然后我希望它有一个链接或按钮触发组件ts文件中的方法.

对于列def,我有以下内容.我究竟做错了什么?

 {
    headerName: 'Actions',
    cellRenderer: params => {
      return `<a (click)="onEditClick("${params.data.hostname}")">Edit</a>`;
    }
 }
Run Code Online (Sandbox Code Playgroud)

typescript ag-grid angular

12
推荐指数
2
解决办法
8685
查看次数

ThrottleTime 操作员的配置参数如何工作?(油门配置)

我已经阅读了油门时间文档,但我没有完全了解操作员。

我知道如何throttleTime(1000)运作。事件到达后,它将跳过所有后续事件 1 秒,然后再次开始此过程。

我难以理解的是究竟是如何ThrottleConfig工作的,这是操作符的第三个参数。

throttleTime<T>(
  duration: number, 
  scheduler: SchedulerLike = async, 
  config: ThrottleConfig = defaultThrottleConfig): MonoTypeOperatorFunction<T>
Run Code Online (Sandbox Code Playgroud)

leadingtrailing属性如何改变源 Observable 的功能?

我已经阅读了很多文档,但他们没有清楚地解释这一点。

所以有四种选择:

  1. { leading: true, trailing: false }:
    默认选项,接收事件后跳过指定持续时间的其他事件,然后重复。
  2. { leading: false, trailing: true }
    ???
  3. { leading: false, trailing: false }
    对此进行了测试,并且 Observable 根本不发出任何内容。
  4. { leading: true, trailing: true }
    ???

javascript rxjs typescript rxjs6

12
推荐指数
1
解决办法
1238
查看次数

关系表删除级联有4种情况,但Entity-config仅允许2种

我有两个普通表和一个关系表。

 --------------------------------------------------
|  Group         | Membership      | User          |
| (ID, NAME)     |(GRP_ID, U_ID)   |(ID, FORENAME) |
 --------------------------------------------------
|  1,  Admin     | 1,      1       | 1, Joe        |
 --------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

成员有两个外键

FK1 Membership.GRP_ID -> Group.ID
FK2 Membership.U_ID   -> User.ID
Run Code Online (Sandbox Code Playgroud)

我可以设置cascade-delete每个外键(FK1FK2)。


事实1

如果既不删除FK1也不FK2删除级联,则我也无法删除Admin或Joe,因为它们保持“成员身份”连接。

 --------------------------------------------------
|  Group         | Membership      | User          |
| (ID, NAME)     |(GRP_ID, U_ID)   |(ID, FORENAME) |
 --------------------------------------------------
|  1,  Admin     | 1,      1       | 1, Joe        |
 --------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

事实2 …

java many-to-many hibernate cascading-deletes

9
推荐指数
1
解决办法
253
查看次数

Markdoc替代javadoc,也适用于IDE

我已经找到了可能的解决方案,该解决方案在https://dzone.com/articles/using-markdown-syntax-javadoc中进行了描述,该解决方案基于https://github.com/Abnaxos/pegdown-doclet。这使得markdown支持可以替代用Javadoc编写丑陋的HTML标签。

在GitHub页面上,还有一个“ markdown-compatible-tooltip”解决方案作为使用IntelliJ中的CTRL + Q工具提示的插件,效果很好,达到50%。

仅举一个例子,Javadoc当前的外观:

/**
 * This enum gives you insight for various person characteristics.
 * <p>
 * This could be the following:
 * <ul>
 * <li>introvert</li>
 * <li>extrovert</li>
 * </ul>
 */
public enum PersonTypes {
...
}
Run Code Online (Sandbox Code Playgroud)

因此,如果您将工具提示/鼠标悬停在IDE中的类上就可以了。但是,由于HTML标记和其他宏的原因,如果您直接位于相关类中,则很难阅读。这只是一个非常简单的示例,没有任何Javadoc特定的宏。

因此,如上文网站所述,我想直接用源代码中的Markdown语法替换Javadoc内容。应用于示例,这看起来像:

/**
 * This enum gives you insight for various person characteristics.
 * 
 * This could be the following:
 *
 * - introvert
 * - extrovert
 * 
 */
public enum PersonTypes {
...
}
Run Code Online (Sandbox Code Playgroud)

PersonTypes …

java eclipse markdown javadoc intellij-idea

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

具有适当类型限制的 Typescript 通用数组记录功能

我正在尝试编写一个通用函数,它接受一个array: T[]和一个选择器K并返回一个Record<T[K], T>将数组中的每个元素从其属性之一映射到其自身的函数。

例如

const input1 = [{ name: "Alice" }, { name: "Bob" }];
const output1: Record<string, { name: string }> = toRecord(input1, "name");
// { Alice: { name: "Alice" }, Bob: { name: "Bob" } }

// -----------------------------------------------------------------
enum Name {
  Alice = "Alice",
  Bob = "Bob"
}
const input2 = [{ name: Name.Alice }, { name: Name.Bob }];
const output2: Record<Name, { name: Name }> = toRecord(input2, "name");
// { Alice: …
Run Code Online (Sandbox Code Playgroud)

generics typescript

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

为什么用catchError处理错误而不是在Angular的订阅错误回调中处理

所以我通常会这样写我的http请求

服务

getData(){
  return this.http.get('url')
}
Run Code Online (Sandbox Code Playgroud)

零件

getTheData() {
  this.service.getData().subscribe(
    (res) => {
      //Do something
    }, 
    (err) => {
      console.log('getData has thrown and error of', err)
    })
Run Code Online (Sandbox Code Playgroud)

但是浏览Angular文档后,他们似乎在Service中将其格式化为

getHeroes(): Observable<Hero[]> {
  return this.http.get<Hero[]>(this.heroesUrl)
    .pipe(
      catchError(this.handleError('getHeroes', []))
    );
}
Run Code Online (Sandbox Code Playgroud)

这隐含的上行空间是什么,因为它对我来说似乎很冗长,而且我个人从不需要解决错误。

rxjs angular2-observables angular

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

将全局 NavigationExtras 添加到路由器的每个导航操作

是否可以向NavigationExtras路由器提供全局?

skipLocationChange每当我导航到我的应用程序中的不同页面时,我都必须使用。我目前在模板中添加此选项:

<a routerLink="settings" skipLocationChange>Settings</a>
Run Code Online (Sandbox Code Playgroud)

或在组件中:

this.router.navigate(['settings'], { skipLocationChange: true });
Run Code Online (Sandbox Code Playgroud)

我能否以某种方式定义由 AngularNavigationExtras自动添加到所有navigate操作的全局默认值,以便我不必手动将它们添加到模板中的每个链接或router.navigate(..)组件中的每个调用?

angular angular-router

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