映射对象数组并使用调用 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>
问题有所帮助!
我必须遍历一组对象并修改每个对象中的一个 属性。我用一个连接到 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>
问题有所帮助!