这是我的要求。我的代码调用一个返回 json 对象的 web 服务器(让我们将其称为 http://myapi/:id)。
我的网站是一个离子应用程序调用此 api 服务器"n"次。"n"的值是用户定义的。
期望在进行下一个 api 调用之前必须完全执行每个 api 调用,并且在运行下一个 api 调用之前,返回的 json 对象也需要传递一组条件。如果 json 对象未通过条件检查,则 for 循环的执行将停止。
代码应如下所示。
getObjects(count: number){
for(i = 0; i < count; i++){
myapi.get().then(val=>{
if(val.flag == true){
;
}else{
break;
}
})
}
}
getObjects(10);
这就是我到目前为止发现的工作。
var i = 0;
getObject(i: number,count: number){
myAPI.then(val=>{
if(i < count){
if(val == true){
//dome some stufff
i = i + 1;
getObject(i, count);
}
}
}).catch(err=>{
//deal with error;
});
//User invoked call
getObject(i, 10);
欢迎任何改进和建议。
一直针对您想要的用法/方法调用: getObjects(10);
并想出了这样的东西:
getObjects(maxCount: number) {
this.getObjectsLoop(maxCount);
}
getObjectsLoop( maxCount: number, count: number = 0) {
count++;
this.requestObject().then(
(val) => {
//do whatever with val ?
if(count <= maxCount){
this.getObjectsLoop(maxCount,count);
}
else {
// this was the last request.
}
},
(err) => {
// stop sending request
}
);
}
requestObject(): Promise<any> {
return myapi.get().then(
(val) => {
return val.flag? val : Promise.reject('Did not pass the success data flag/condition');
},
(err) => {
return Promise.reject(err);
}
);
}
试试吧。可以将其他两个函数声明为 private
方法。您实际上可以直接调用getObjectsLoop(10)
和/或只是用getObjects
重命名它并删除第一个函数。我故意这样做,以便您可以将最后两个函数声明为私有,而 Ts getObjects
智能感知将仅显示并允许一个参数 (maxCount)。