如何捕获局部变量的值以便在Observable.map()
回调中使用?例如,在我的Anglar2应用程序中,我希望捕获quantity
的值,以便在findItem().map()
中使用:
let quantity : number = 1; //<-- needs to be captured
let ordered : string[] = [];
//not interested in actual results, just adding queried items to cart
let queries : Observable<void>[] = [];
//res.entities are NLP classified entities, either item_id:string or quantity:number
for (let entity of res.entities) {
if(entity.entity == 'item') {
queries.push(
this.findItem(entity.value).map(item => {
if(item != null)
{
for(let i : number = quantity; i > 0; i--) this.cart.addItem(item);
}
ordered.push(quantity + 'x ' + item.fullName);//NL message for user
}));
quantity = 1;//reset quantity
}
else if(entity.entity == 'quantity') quantity = entity.value;
}
return Observable.forkJoin(queries, ...);
ordered
将为所有项目显示数量1(因为quantity
的值在循环结束时始终为1)。
我的研究表明,这是JavaScript中非常常见的问题,并且有很多例子如何在for
循环中捕获变量。但是,我无法找到有关如何捕获变量值以供在回调中使用的任何信息,例如Observable.map()
答案 0 :(得分:0)
在for
循环中使用const。
for (let entity of res.entities) {
if(entity.entity == 'item') {
const q = quantity; //here or somewhere
queries.push(
//..... use q instead
}
else if(entity.entity == 'quantity') quantity = entity.value;
}