как добавить задержку в HTTP-запросе с использованием углового? [Дубликат]

ES6

Использование: где request - require('./await-request')

const init = async () => {
    try {
        const result = await request({
            uri: 'statdirectory/exchange?json',
            baseUrl: 'https://bank.gov.ua/NBUStatService/v1/',
            json: true
        })
        console.log(result)
    }
    catch (err) {
        console.error(err)
    }
}

Код:

// request-service.js
const request = require('request')

module.exports = async (value) => 
    new Promise((resolve, reject) => {
        request(value, (error, response, data) => {
            if(error) reject(error)
            else resolve(data)
        })
    })
3
задан micronyks 14 March 2016 в 16:58
поделиться

2 ответа

Вы должны трансформироваться из объекта, наблюдаемого в http, наблюдаемый с помощью switchMap следующим образом:

observableObj$: Observable<any>;
subjectObj = new Subject();

 ngOnInit() {
    this.observableObj$ = this.subjectObj.pipe(
      debounceTime(1000),
      switchMap(() => {
        ...
        return this.http.get(some_url).map(r => r.json());
      }),
    );

    this.observableObj$.subscribe((data) => {
      // result of http get...
      ...
    });
}

getStuff() {
    this.subjectObj.next();
}
0
ответ дан A. Morel 18 August 2018 в 03:38
поделиться

debounceTime позволяет буферизовать события и обрабатывать последний только через некоторое время.

Это полезно в контексте входов, но должно быть определено на наблюдаемом, которое вызывает событие не на том, что создано для HTTP-запроса.

Ниже приведен пример управления, связанного с входом, который использует оператор debounceTime:

@Component({
  (...)
  template: `
    <input [ngFormControl]="ctrl"/>
  `
})
export class MyComponent {
  constructor() {
    this.ctrl = new Control();
    this.ctrl.valueChanges
               .debounceTime(500)
               .distinctUntilChanged()
               .switchMap((value: string) => {
                 // Get data according to the filled value
                 return this.service.getData(entry);
               })
               .subscribe(data => {
                 // Update the linked list
                 this.list = data;
               });
  }
}

Эта статья также может заинтересовать вы:

Следуя комментарию микроникса, вот дополнительная ссылка:

8
ответ дан Thierry Templier 18 August 2018 в 03:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: