我想在每次api调用后设置一些等待时间。因此,我为调用for循环的api添加了setTimeout,但它提供了setTimeout中未定义的createAPIService
的api服务。下面是我的代码。
for (let i = 0; i < this.fooditemselecteddetails.length; i++) {
this.spinnerService.hide();
setTimeout(function() {
this.common.createAPIService('api/booking/AddConcessions?CinemaId=' + this.cinemaid + '&TransactionId=' + this.temptransaction.TransactionId + '&ItemId=' + this.fooditemselecteddetails[i].id + '&Quantity=' + this.fooditemselecteddetails[i].quantity + "&BookingId=" + this.transactionAPIRequest.ORDER_ID, '')
.subscribe((result: any) => {
this.spinnerService.hide();
this.addconcession = result;
console.log(this.addconcession);
if (this.addconcession.IsSuccess == true) {
if (i == this.fooditemselecteddetails.length - 1) {
localStorage.setItem("bookingid", this.transactionAPIRequest.ORDER_ID);
this.common.createAPIService('api/booking/FinalBookingDetails?BookingId=' + this.transactionAPIRequest.ORDER_ID, '').subscribe((result2: any) => {
this.vistavalidation = result2;
if (this.vistavalidation.BookingID > 0) {
this.common.createAPIService('api/booking/ContinueTransaction?CinemaId=' + this.cinemaid + '&TransactionId=' + this.temptransaction.TransactionId, '').subscribe((result3: any) => {
if (result3.IsSuccess) {
this.ContinueTransactionresult = result3;
this.showTabOnClick('tabs-4');
} else {
this.common.ShowNotification("Food Item", result3.Error, "info");
this.spinnerService.hide();
}
});
} else {
this.common.ShowNotification("Food Item", 'something went wrong, please try again', "info");
this.spinnerService.hide();
}
});
}
} else {
this.common.ShowNotification("Food Item", result.Error, "error");
this.spinnerService.hide();
}
});
}, 2000);
console.log(this.addconcession);
}
答案 0 :(得分:1)
尝试使用箭头函数语法保留 this
setTimeout(() => {
代替 setTimeout(function() => {
:
for (let i = 0; i < this.fooditemselecteddetails.length; i++) {
this.spinnerService.hide();
setTimeout(() => { ... }, 2000);
console.log(this.addconcession);
}
答案 1 :(得分:1)
使用箭头功能,即setTimeout(()=>{ },1000)
。它将继承父级的this
,您将可以使用this
访问类的所有方法和变量。
答案 2 :(得分:0)
将此“ s etTimeout(function(){”)替换为“ setTimeout(()=> {””。
答案 3 :(得分:0)
使用箭头功能时,将创建一个闭合。闭包是一个内部函数,可以访问外部(封装)函数的变量-作用域链。闭包具有三个作用域链:它可以访问自己的范围(在大括号之间定义的变量),可以访问外部函数的变量,并且可以访问全局变量。
此处有更多详细信息:http://javascriptissexy.com/understand-javascript-closures-with-ease/