Как получить ценность от Promise и использовать ее позже?

Позвольте мне объяснить проблему, я пытаюсь показать некоторые детали в модальном окне. Я использую таблицу в модальном режиме, чтобы показать детали. В одном разделе мне нужно имя продукта, которое возвращается из запроса к базе данных, и я должен использовать это значение, возвращенное из базы данных. Код для таблицы выглядит следующим образом:

<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), а взамен мне нужно имя из базы данных. Но я не могу получить доступ к данным из области обещаний, чтобы вернуть их.

Обещание никогда не будет разрешено до выполнения оператора return и завершения функции, поэтому productName всегда будет undefined в этот момент, а undefined всегда будет возвращаемым значением этой функции. Единственный вариант — вернуть обещание и обработать его в другом коде: const getProdcutName = (id) => getProductDetails(id).then(response => response.data.name);

jsejcksn 05.12.2022 21:05

Отвечает ли это на ваш вопрос? Как вернуть ответ при асинхронном вызове?

jsejcksn 05.12.2022 21:08

@jsejcksn Привет, дорогой, не могли бы вы еще раз проверить проблему. Я отредактировал вопрос и попытался кратко объяснить проблему.

Sifat Hasan Wakib 06.12.2022 11:05
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
3
65
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это решение моей проблемы. Спасибо всем, кто помог мне.

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>
)}

И отправлять товары в корзинуItem

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

Другие вопросы по теме