axios 如何从承诺中获得价值并在以后使用?

voj3qocg  于 2022-12-12  发布在  iOS
关注(0)|答案(1)|浏览(142)

让我解释一下这个问题,我试图在模态中显示一些细节。我在模态中使用表来显示细节。在一个部分中,我需要从数据库查询返回的产品名称,我必须使用从数据库返回的值。表的代码如下:

<tbody>
                            {item.cartItems.map((item, i) =>
                                <tr key={item._id}>
                                    <th scope="row">{i + 1}</th>
                                    <th><img src={`${API}/product/photo/${item.product}`} alt={item.product.name} width="60px" height="50px" /></th>
                                    <td>{**data returned from database**}</td>
                                    <td align="center">{item.count}</td>
                                    <td align="center">৳ {item.price * item.count} </td>
                                </tr>
                            )}
                        </tbody>

为了从数据库中获取数据,我使用了一个函数

const getProdcutName = id => {
    var productName;
    getProductDetails(id)
        .then(response => {
            productName = response.data.name;
        });
    return productName;
}

但是我无法访问值。主要的问题是,在每个迭代中,我需要将**{item.product}发送到getProductName(id)**,并且我需要数据库中的名称作为返回。但是我无法访问承诺范围中的数据以返回它。

pn9klfpd

pn9klfpd1#

这就是我问题的解决方案。感谢每一个帮助我的人。

const CartItem = ({ item, i }) => {
const [productName, setProductName] = useState();

useEffect(() => {
    getProductDetails(item.product)
        .then(res => { setProductName(res.data.name) });
}, []);

return (
    <tr key={item._id}>
        <th scope="row">{i + 1}</th>
        <th><img src={`${API}/product/photo/${item.product}`} alt={item.product.name} width="60px" height="50px" /></th>
        <td>{productName == undefined ? "Getting Name" : productName}</td>
        <td align="center">{item.count}</td>
        <td align="center">৳ {item.price * item.count} </td>
    </tr>
)}

并将项目发送到cartItem

<tbody>
                            {item.cartItems.map((item, i) =>
                                <CartItem item={item} i={i} key={item._id} />
                            )}
                        </tbody>

相关问题