Есть много Аппарошей решения этого:
1. Использование BehaviorSubject
import { BehaviorSubject } from 'rxjs';
export class StoreDataProvider {
private _wooData: any;
private wooData: BehaviorSubject<any> = new BehaviorSubject<any>(null);
public wooData$ = this.wooData.asObservable();
constructor() {
this._wooData = Woo({...});
}
getAllProducts() {
this._wooData.get('products', (err, data, res) => {
this.wooData.next(res);
});
}
}
И затем вы можете использовать его в своем Компоненте следующим образом:
constructor(private _wooService: WooService) {}
ngOnInit() {
this._wooService.wooData$.subscribe(res => console.log(res));
this._wooService.getAllProducts();
}
Обратите внимание, что изначально вы получите ноль, так как мы инициализировалиBehaviorSubject
с null
.Но как только вы позвоните getAllProducts
и получите данные, вы получите свои данные.
2. Использование Promise.
export class StoreDataProvider {
private _wooData: any;
constructor() {
this._wooData = Woo({...});
}
getAllProducts(cb) {
return new Promise((resolve, reject) => {
this._wooData.get('products', (err, data, res) => {
if(err) reject(err);
else resolve(res);
});
});
}
}
И затем вы можете использовать его в своем Компоненте следующим образом:
constructor(private _wooService: WooService) {}
ngOnInit() {
this._wooService.getAllProducts()
.then((res) => console.log(res))
}
3. Использование обратного вызова
export class StoreDataProvider {
private _wooData: any;
constructor() {
this._wooData = Woo({...});
}
getAllProducts(cb) {
this._wooData.get('products', (err, data, res) => {
cb(res);
});
}
}
А затем вы можете использовать его в своем компоненте следующим образом:
constructor(private _wooService: WooService) {}
ngOnInit() {
this._wooService.getAllProducts((res) => console.log(res));
}