小编car*_*ant的帖子

Angular 2 - 当 Http 请求依赖于另一个 Http 请求的结果时该怎么办

我无法弄清楚如何使用 Http 请求的结果来发出另一个 Http 请求。

我有一个从后端 API 请求和接收 JSON Web 令牌的服务,如下所示:

@Injectable()
export class JwtAuthorizationService {

  constructor(private http: Http) {}

  public requestToken(): Observable<string> {
    // Set dummy credentials.
    let body = this.setBody();
    let headers = this.setHeaders();
    let token = this.http.post(tokenUrl, body, { headers: headers })
      .map(this.extractData)
      .catch(this.handleError);

    // Return the Observable
    return token;
  }

  private extractData(res: Response): string {
    let body = res.text();
    return body || "";
  }
Run Code Online (Sandbox Code Playgroud)

我现在如何使用requestToken()(Observable)的结果进行另一个 API 调用,通过 JWT 进行身份验证,并从中获取结果?或者更简单地说,当一个 Http 调用依赖于另一个调用的结果时,你会怎么做?

rxjs angular

4
推荐指数
1
解决办法
2756
查看次数

Firebase数据与Observable连接

目前,我遇到了Firebase Observable加入的问题.

我真的不知道哪种方法可以从不同的对象中获取数据并将它们连接在一起.

我的数据结构:

users {
    userid1 {
        conversationid: id
        ...
    },
    userid2 {
       ...
    }
}

conversations {
    conversationid {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我想得到当前用户的所有对话.要获取当前用户ID,我将订阅auth Observable,如下所示:

 this.af.auth.subscribe(auth => {
    console.log(auth.uid);
 });
Run Code Online (Sandbox Code Playgroud)

接下来我需要用户的子对象来获取会话ID.我是这样做的:

 //needs the userid from Observable on top 
 this.af.database.object('/users/' + auth.uid)
     .map(
         user => {
             console.log(user.conversationid);
         }
      )
      .subscribe();
Run Code Online (Sandbox Code Playgroud)

对话也一样:

//needs the conversationid from the second Observable 
this.af.database.list('/conversations/' + user.conversationid)
    .subscribe();
Run Code Online (Sandbox Code Playgroud)

如您所见,有3个Observable.我知道可以嵌套它们,但在我的项目中,这可能会发生多达5次.

是否可以在不嵌套3个Observable的情况下进行对话?

observable rxjs firebase firebase-realtime-database angularfire2

4
推荐指数
1
解决办法
1910
查看次数

Sitecore FakeDB测试的最小Nugets占用空间是多少?

我开始与标准Sitecore.KernelSitecore.Nexus.Sitecore在这里提供了非常具有描述性的错误消息,所以我也添加DependencyInjection了.它带来了很多依赖项,并且它们没有显示在config belo中.如您所见,我使用*.NoReferencesSitecore软件包的版本来控制依赖项.

<packages>
  <package id="Microsoft.Extensions.DependencyInjection" version="1.0.0" targetFramework="net452" />
  <package id="Sitecore.FakeDb" version="1.2.2" targetFramework="net452" />
  <package id="Sitecore.Kernel.NoReferences" version="8.2.160729" targetFramework="net452" developmentDependency="true" />
  <package id="Sitecore.Nexus.NoReferences" version="8.2.160729" targetFramework="net452" developmentDependency="true" />
</packages>
Run Code Online (Sandbox Code Playgroud)

之后我卡住了.我收到的错误没有提供错过的内容:

System.NullReferenceException : Object reference not set to an instance of an object.
    at Sitecore.Configuration.DefaultFactory.CreateType(XmlNode configNode, String[] parameters, Boolean assert)
    at Sitecore.Configuration.DefaultFactory.CreateFromTypeName(XmlNode configNode, String[] parameters, Boolean assert)
    at Sitecore.Configuration.DefaultFactory.CreateObject(XmlNode configNode, String[] parameters, Boolean assert, IFactoryHelper helper)
    at Sitecore.Configuration.DefaultFactory.CreateObject(XmlNode configNode, String[] parameters, Boolean assert)
    at Sitecore.Configuration.DefaultFactory.CreateObject(String configPath, …
Run Code Online (Sandbox Code Playgroud)

sitecore sitecore8

3
推荐指数
1
解决办法
473
查看次数

RxJS将日志减少为数组,但将错误视为对象

我试图了解反应式编程和可观察性,但当然没有成功.我有以下代码:

this.searchSubscription = this.filtersSubject
  .takeLast(2)
  .reduce((acc, cur) => {
    console.log(acc);
    acc.push(cur);
    return acc;
  }, [])
  .debounceTime(1000)
  .subscribe(x => this.emitFilters());
Run Code Online (Sandbox Code Playgroud)

我想使用takeLast(2)管道,reduce所以我可以把它变成两个值的数组,并且过滤器是两者之间的某些值是不同的.我一直在浏览文档reduce,甚至传递种子,但VS Code告诉我,Property 'push' does not exist on type 'Object'.但是console.log节目acc是一个数组.我对正在发生的事情以及如何解决这个问题感到困惑.当然,我可能完全错误地解决了这个问题,这使得可观察的内容难以理解.

rxjs angular

3
推荐指数
1
解决办法
822
查看次数

展平/束缚多个嵌套的Firebase可观察对象

我正在尝试使用AngularFire2。我正在查询,下面一切正常。

我想将所有/大多数可观察物合并为一个:

getTournamentWithRounds(key):Observable<Tournament> {

    return this.af.database
        .object(`/tournaments/${key}`)
        .map(tourney => {

            let t = Tournament.fromJson(tourney);

            this.af.database.list('players', {
                query: {
                    orderByChild: 'tournament_key',
                    equalTo: key
                }
            })
            .map(Player.fromJsonList)
            .subscribe(ps => { t.players = ps; });

            this.af.database.list('rounds', {
                query: {
                    orderByChild: 'tournament_key',
                    equalTo: key
                }
            })
            .map(Round.fromJsonList)
            .subscribe(rs => { t.rounds= rs; })

            return t;
        })
  }
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以加入所有可观察对象,并通过一个订阅功能获得输出。

我想知道何时所有初始数据都已加载,并在将其输出到视图之前在控制器中执行其他计算。

另外,如何扩展到每轮比赛?

我对上述代码的扩展为:

...

this.af.database.list('rounds', {
    query: {
        orderByChild: 'tournament_key',
        equalTo: key
    }
})
.map(rounds => {
    return rounds.map((round) => {

        let r = Round.fromJson(round);

        this.af.database.list('matches', …
Run Code Online (Sandbox Code Playgroud)

observable firebase firebase-realtime-database rxjs5 angularfire2

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

如何在Leaflet闪烁中制作标记

是否有一种简单的方法可以使Leaflet地图中的标记闪烁?我的意思是动画闪烁 - 类似于从不透明度1.0到1秒内不透明度0.5然后反转,循环结束的过渡循环.

animation marker leaflet

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

如何在Ionic 2中使用Pipes(发布v2.2.1)

我想使用Pipe来对这里提供的一些数据进行排序.

以上看起来与角度文档一致,即我们有以下导入和类定义:

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({name: 'exponentialStrength'})
export class ExponentialStrengthPipe implements PipeTransform {
  transform(value: number, exponent: string): number {
    let exp = parseFloat(exponent);
    return Math.pow(value, isNaN(exp) ? 1 : exp);
  }
}
Run Code Online (Sandbox Code Playgroud)

所以,在上面我们从进口PipePipeTransform,然后我们从我们的派生类PipeTransform.

使用离子发生器,例如ionic g pipe testPipe我注意到不同的进口,并且它没有实现PipeTransform:

@Pipe({
  name: 'test-pipe'
})
@Injectable()
export class TestPipe {
  transform(value, args) {
    value = value + ''; // make sure it's a string
    return value.toLowerCase(); …
Run Code Online (Sandbox Code Playgroud)

typescript ionic2 angular

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

是否可以在Observable订阅方法中包含逻辑?

我正在观看@ john_lindquist关于RxJS的egghead教程,并且他强调了不包括业务逻辑而不是.subscribe()方法的观点.

因此,我正在创建一个canActivate防护,以防止用户进入无效路由,我不得不在订阅方法中构建逻辑.有一个更好的方法吗?

import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, Router } from '@angular/router';
import { Subscription } from 'rxjs/Subscription';
import { Subject } from 'rxjs/Subject';

import { Apollo, ApolloQueryObservable } from 'apollo-angular';

import { GQTicketId } from './ticket.model';



@Injectable()
export class TicketRouteActivatorService implements CanActivate {

  public ticket;
  private returnTrue: Subject<Boolean> = new Subject<Boolean>();
  private ticketSubscription: Subscription;

  constructor(private apollo: Apollo, 
              private router: Router) { }

  canActivate(route: ActivatedRouteSnapshot ) {

    this.ticketSubscription = this.apollo.watchQuery({
      query: GQTicketId,
      variables: …
Run Code Online (Sandbox Code Playgroud)

observable rxjs apollo-client angular

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