如何在 for 循环中等待响应?

How to wait for response inside for loop?(如何在 for 循环中等待响应?)
本文介绍了如何在 for 循环中等待响应?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

说明:我在for循环中调用了一个HTTP请求.我想从服务文件中获取响应然后增加循环.我如何等待从服务文件中获取响应然后执行循环.

for(let i=0;i

<块引用>

请指教

解决方案

你应该使用异步函数.首先将 HTTP 请求转换为 Promise,然后在 for 循环中异步调用该 Promise:

 asyncReq (){return new Promise((resolve, reject) => {this.user.list_upload(JSON.stringify(ins_arr)).subscribe(data=>{if(data.hasOwnProperty('STATUS')){if(data.STATUS.toLowerCase()=='成功'){this.update();解决();}否则 if(data.STATUS.toLowerCase() == 'error'){this.user.showToast(data.MESSAGE);拒绝();}}},错误=>{this.user.showToast("服务文件出错");拒绝(错误);});})}//异步函数,其中循环仅在 asyncReq 完成后进行异步 asyncForFunction () {for(让 i=0; i < final_arr.length; i++){等待 this.asyncReq ();}}

Description : I called an HTTP request inside for loop.I want to get the response from service file then increase loop.How can i wait to get response from service file then execute loop.

for(let i=0;i<final_arr.length;i++)
{
  this.user.list_upload(JSON.stringify(ins_arr)).subscribe(data=>{
      if(data.hasOwnProperty('STATUS'))
      {        if(data.STATUS.toLowerCase()=='success')
        {  
          this.update();
        }
        else if(data.STATUS.toLowerCase() == 'error')
        {
         this.user.showToast(data.MESSAGE);  
        }
      }
    },err=>{
      this.user.showToast("Error occurred in service file");
    });
}

Please advise

解决方案

You should use an async function. First convert the HTTP request to a promise, then call that promise asynchronously inside the for loop:

 asyncReq (){
    return  new Promise((resolve, reject) => {
          this.user.list_upload(JSON.stringify(ins_arr)).subscribe(data=>{
            if(data.hasOwnProperty('STATUS')){        
              if(data.STATUS.toLowerCase()=='success')
              {  
                this.update();
                resolve();
              }
              else if(data.STATUS.toLowerCase() == 'error')
              {
                this.user.showToast(data.MESSAGE);  
                reject();
              }
            }
          },err=>{
            this.user.showToast("Error occurred in service file");
            reject(err);
          });
      })
  }


  //Async function where loop progresses only after asyncReq completes
  async asyncForFunction () {
    for(let i=0; i < final_arr.length; i++){
      await this.asyncReq ();
    }
  }

这篇关于如何在 for 循环中等待响应?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Update another component when Formik form changes(当Formik表单更改时更新另一个组件)
Formik validation isSubmitting / isValidating not getting set to true(Formik验证正在提交/isValiating未设置为True)
React Validation Max Range Using Formik(使用Formik的Reaction验证最大范围)
Validation using Yup to check string or number length(使用YUP检查字符串或数字长度的验证)
Updating initialValues prop on Formik Form does not update input value(更新Formik表单上的初始值属性不会更新输入值)
password validation with yup and formik(使用YUP和Formick进行密码验证)