变量调用在订阅者函数外部返回值"未定义"



以前也有人问过类似的问题,得到了很多回复,我听起来可能重复了一些,但我只是迫切需要第三只眼睛。我正在以角度为订阅函数内部的变量赋值,但当在订阅函数外部调用时,该变量返回"undefined"。这就是我所做的:

this.invoiceService.buildDataForDiscountGraph(this.usrId, this.currentYear)
.subscribe( response => {
this.discountsGraphData += response;
//this.discountGraphData is of type 'string'
});
This.discountsGraphData

当在订阅者内部调用时,返回所需的值,但在订阅者之外,在另一个函数中,甚至在我的模板中,它都是一个空字符串。

这是buildDataForDiscountGraph((函数的外观:

buildDataForDiscountGraph(u,y){
return this.getUserInvoices(u)
.pipe(
map(response  => {
if(Object.keys(response).length > 0)
{
let jan = 0, feb = 0, mar = 0, apr = 0;
let may = 0, june = 0, july = 0, aug = 0;
let sep = 0, oct = 0, nov = 0, dec = 0;
for(let x = 0; x < Object.keys(response).length; x++) {
let dateSplit = response[x]['datecreated'].split('-');
let year = dateSplit[0];
let month = dateSplit[1];
if(y == year){
if(month == '01')jan += response[x]['discount'];
if(month == '02')feb += response[x]['discount'];
if(month == '03')mar += response[x]['discount'];
if(month == '04')apr += response[x]['discount'];
if(month == '05')may += response[x]['discount'];
if(month == '06')june += response[x]['discount'];
if(month == '07')july += response[x]['discount'];
if(month == '08')aug += response[x]['discount'];
if(month == '09')sep += response[x]['discount'];
if(month == '10')oct += response[x]['discount'];
if(month == '11')nov += response[x]['discount'];
if(month == '12')dec += response[x]['discount'];
}
}
return [
jan, feb, mar, apr, may, june, july, aug,
sep, oct, nov, dec
].join();
}  
})
)
}

我不得不把代码移到我的服务中,试图找出原因。服务函数getUserInvoices((调用这样的端点;

/**
* Get Invoices
*
* @param userId
* @param Limit
* @param Offset
*/
getUserInvoices(usrId, limit?, offset?){
return this.http.get(this.apiEndPoint + usrId + '/invoices?limit=' + limit + '&offset=' + offset)
.pipe(
map( data =>
{
return (data ? data : []);
}
)
)
}

您可以使用功能在订阅者外部设置this.discountGraphData

this.invoiceService.buildDataForDiscountGraph(this.usrId, this.currentYear)
.subscribe( response => {
this.setDate(response);
//this.discountsGraphData += response;
//this.discountGraphData is of type 'string'
});
setDate(data){
this.discountsGraphData = data;
console.log(this.discountsGraphData);  --> you will get value here.
}

最新更新