gpt4 book ai didi

node.js - 异步等待并 promise 所有

转载 作者:太空宇宙 更新时间:2023-11-03 21:50:44 24 4
gpt4 key购买 nike

我想知道我是否正确地将promise.all与async wait一起使用。

基本上,我需要根据ID获取房子数据,然后我需要获取该房子的所有评论以及评论数量。

  server.get("/api/houses/:id", async (req, res) => {
const { id } = req.params;
const house = await House.findByPk(id);
if (!house) {
return res.status(400).send("No house found");
}

const reviews = await Review.findAndCountAll({
where: {
houseId: house.id
}
});

house.dataValues.reviewsCount = reviews.count;

const results = await Promise.all([house.dataValues, reviews.rows]);
console.log(results);
res.send(results);
});

在前端,当我在发出 http 请求后 console.log 响应时,我得到了下面的内容,这看起来没问题,因为 Promise.all 为您提供了数组。但我不知道这是否是最好的方法,或者是否有更好的方法。

[
{
id: 2329,
host: 2,
picture: '/img/houses/1.jpg',
type: 'Entire house',
town: 'Some town',
title: 'Some title',
price: 50,
description: 'Some description',
guests: 4,
bedrooms: 1,
beds: 2,
baths: 1,
wifi: true,
reviewsCount: 2
},
[
{
id: 1,
houseId: 2329,
userId: 1,
comment: 'An awesome review',
createdAt: '2019-01-11T22:00:00.000Z',
updatedAt: '2019-01-11T22:00:00.000Z'
},
{
id: 2,
houseId: 2329,
userId: 2,
comment: 'Another awesome review',
createdAt: '2019-01-11T22:00:00.000Z',
updatedAt: '2019-01-11T22:00:00.000Z'
}
]
]

最佳答案

您没有正确使用Promise.all。该代码正在运行,因为您正在分别等待每个 Promise。

由于 Review.findAndCountAll 取决于 House.findByPk 结果,Promise.all 在这里不会有任何好处。

您正在将 Promise.all 与两个 Promise 的已解析值一起使用,因此您可以删除它。

 server.get("/api/houses/:id", async (req, res) => {
const { id } = req.params;
const housePromise = await House.findByPk(id);


const reviews = await Review.findAndCountAll({
where: {
houseId: house.id
}
});

house.dataValues.reviewsCount = reviews.count;

res.send([house.dataValues, reviews.rows]);
});
<小时/>

基本上你正在做:

const res = await Promise.all([1, 5]); // [1, 5]

可以直接翻译为:

const res = [1, 5];
<小时/>

我认为最好发送一个对象,而不是以数组形式发送:

{
house: house.dataValues,
reviews: reviews.rows
}

关于node.js - 异步等待并 promise 所有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59126227/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com