Javascript 承诺然后数组。推另一个承诺不起作用?

Javascript 承诺然后数组。推另一个承诺不起作用?,javascript,promise,Javascript,Promise,我试图循环通过从API异步返回的值数组,在该循环中,我想调用另一个返回承诺的函数。我无法在循环中得到要评估的第二个承诺。我该怎么做 async componentDidMount(){ const resolvedCampgrounds = await this.returnThoseValues('getListings','/world') resolvedCampgrounds.forEach(async feature=> { if (feature['map

我试图循环通过从API异步返回的值数组,在该循环中,我想调用另一个返回承诺的函数。我无法在循环中得到要评估的第二个承诺。我该怎么做

async componentDidMount(){     
 const resolvedCampgrounds = await this.returnThoseValues('getListings','/world')
 resolvedCampgrounds.forEach(async feature=> {
    if (feature['mapOn'].toUpperCase()==='TRUE'){ 

              await coordinateData.push({ 

                "key": feature['id'],
                "Address": feature['street_address'] + feature['zip_code'],
                "image": jpg,
                "position": CodeAddress(feature['street_address'] + feature['zip_code'],this.props.google).then(value => {return value})
              })

          }
      })
      set_state(coordinateData);

CodeAddress()返回一个已解析的承诺,我尝试通过.then()访问该承诺的结果。到目前为止,我能够实现这一点的唯一方法是在每个对象的循环中单独调用set_状态(而不是数组.push ing),但这还不够,因为我需要“批量推送”,而不是每次都更改状态。

代码中的一个问题是,您正在使用forEach执行一些异步操作,而forEach不支持它

也许如果你解决了这个问题,你原来的问题也会解决

您需要添加另一个名为asyncForEach的方法,如下所示

async function asyncForEach(array, callback) {
  for (let index = 0; index < array.length; index++) {
    await callback(array[index], index, array);
  }
}

了解更多信息

resolvedCampgrounds
这是一个承诺数组吗?对于初学者,在解析CodeAddress()后如何执行数组。push()?Array.push()不是一个异步进程,如果你这样做,那么它将在“position”atribute上推送一个字符串“promise”。解决方法是使用异步模块。有了这个,如果需要的话,yu还可以通过一次运行多个线程来加快异步功能
await async.eachLimit(ResolvedCampGrands,limit,(feature)=>{
我不知道CodeAddress()函数的工作原理,但我建议:让position=await CodeAddress(feature['street\u address']+
feature['zip\u code',this.props.google)。然后(value=>{return value})
No sorry这是一个普通数组@KunalMukherjeeI试图在if()语句之后和.push之前解析CodeAddress().push。我在.push中使用value,它会在返回[]的地方执行一些异步操作在控制台日志中,值仅在我展开console.log时出现。因此没有正确地同步发送到set_state@IonutEugenDid不知道这一点。实现了这一点,但没有解决问题,因为数组返回async(在console.log中显示为[],对象仅在展开日志时可见…,据我理解应该是[{..},{..}])coordinateData的类型是什么?@user12726868另外,我在您的代码检查中发现了另一个问题,更新的版本假设CodeAddress是一个返回承诺的函数
async componentDidMount(){     
 const resolvedCampgrounds = await this.returnThoseValues('getListings','/world')
 asyncForEach(resolvedCampgrounds, async feature=> {
    if (feature['mapOn'].toUpperCase()==='TRUE'){ 
              const position = await CodeAddress(feature['street_address'] + feature['zip_code'],this.props.google);
              coordinateData.push({ 

                "key": feature['id'],
                "Address": feature['street_address'] + feature['zip_code'],
                "image": jpg,
                "position": position
              })

          }
      })
      set_state(coordinateData);