Javascript 如何在节点中调用调用顺序->;表达式^4.14

Javascript 如何在节点中调用调用顺序->;表达式^4.14,javascript,node.js,express,promise,synchronization,Javascript,Node.js,Express,Promise,Synchronization,我需要在API返回的响应中搜索给定的“键”。我必须用不同的输入多次调用同一个API。 从API获得响应后,我需要在API响应中搜索密钥。如果密钥不存在,则使用不同的输入和搜索再次调用相同的API…继续 基本上,直到我在API响应中完成一次搜索键的迭代,执行应该等待。如何才能做到这一点?请建议 我尝试了下面的方法,执行时不必等到它在API响应中搜索键 for (i=0;i< departments.length;i++)

我需要在API返回的响应中搜索给定的“键”。我必须用不同的输入多次调用同一个API。 从API获得响应后,我需要在API响应中搜索密钥。如果密钥不存在,则使用不同的输入和搜索再次调用相同的API…继续

基本上,直到我在API响应中完成一次搜索键的迭代,执行应该等待。如何才能做到这一点?请建议

我尝试了下面的方法,执行时不必等到它在API响应中搜索键

for (i=0;i< departments.length;i++)                                                                       
{
   getInformation(departments[i]).
    then((response) => {
    //verify whether given key present in response
    
    })
    .catch((err)) => {
 //log error
 });

}// end of for loop
}
for(i=0;i{
//验证响应中是否存在给定的密钥
})
.catch((err))=>{
//日志错误
});
}//循环结束
}
注意:我想用next键继续搜索操作,即使它们在一个API调用中有任何异常


谢谢

您必须使用递归

let departments = [xxx]
let myResult = []

const search = (pool, resolve, reject) => {
        if (pool.length === 0) {
           return resolve()
        }

        let [department, ...rest] = pool

        getInformation(department)
        .then(data => {
             myResult.push('something')
        })
        .catch(e => {})
        .finally(() => {
           search(rest, resolve, reject)
        })
}

const searchInDeps = new Promise((resolve, reject) => {
   search(departments, resolve, reject)
})

searchInDeps
.then(() => {
     // do something with myResult
})
.catch(e => {})

另一种方法是,当您需要循环时,您可以运行每个承诺,并等待所有承诺的结果

let searches = []

for (i=0;i< departments.length;i++) {
  searches.push(new Promise((resolve, reject) => {
        getInformation(departments[i])
        .then(data => {
             resolve('something')
        })
        .catch(e => resolve('something'))   
  })
}

Promise.all(searches)
.then(results => {
    // array of results
})
.catch(error => {})
let search=[]
对于(i=0;i{
获取信息(部门[i])
。然后(数据=>{
解决(‘某事’)
})
.catch(e=>resolve('something'))
})
}
承诺。全部(搜索)
。然后(结果=>{
//结果数组
})
.catch(错误=>{})