映射对象数组并使用调用 API 的函数更改一个 属性。我一直在等待承诺

Map array of objects and change one property with a function that calls an API. I keep getting promise pending

我必须遍历一组对象并修改每个对象中的一个 属性。我用一个连接到 Twitter API 的函数修改了这个 属性。我的问题是我一定是错误地使用了 async 和 await,因为我正在等待一个 promise。

这是我的代码:

getProfile:(req,res)=>{
        try {
           const userId=req.params.id 
           const profile=db.query('SELECT * FROM profiles WHERE user_id=?',
        [userId],async (err,result)=>{

            if(err) return res.status(404).send(err)

            const profiles= await result.map(  obj=>{

                const container={}
                container['name']=obj.profile_name
                container['desc']=obj.profile_desc
                container['twitter']=  connectTwitt.getTwitt(obj.twitt)//calls to api
                return  container
            })
            console.log(profiles)// promise pending
            res.send(profiles)

这是我正在映射的对象数组的结构:

[
 {profile_name:`Elon Musk`, profile_desc:'enterpreneur',twitt:636465}
]

是的,您使用的 async/await 语法有点不正确。

现在,您正在 Array.map() 方法上调用 await。但是,那个方法不是promise-based.

相反,您必须将 await 关键字添加到 getTwitt() 方法,并且 await 才能完成所有承诺。

经过这些更改,它应该如下所示。

const profiles = await Promise.all(result.map(async (obj) => { // This line has been modified
  const container = {};
  container["name"] = obj.profile_name;
  container["desc"] = obj.profile_desc;
  container["twitter"] = await connectTwitt.getTwitt(obj.twitt); // This line has been modified.
  return container;
}));

希望这对您的 <pending> 问题有所帮助!