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)
})
})
Вы должны трансформироваться из объекта, наблюдаемого в 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();
}
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;
});
}
}
Эта статья также может заинтересовать вы:
Следуя комментарию микроникса, вот дополнительная ссылка: