Angular2 Observable.map捕获局部变量的值

时间:2017-05-15 15:40:25

标签: javascript angular typescript

如何捕获局部变量的以便在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()

1 个答案:

答案 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;
}