Conditional For Looping in Typescript / Javascript 基于异步调用返回的



这是我的要求。我的代码调用一个返回 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)。

最新更新