Функция, возвращающая «[object Promise]» вместо логических данных

Я пытаюсь принять решение на основе возвращаемого логического значения функции. Это моя функция:

const isAssigned = async (issueId) => {
    try {
        const response = await axios.get(route('issueAssigned', { issueId: issueId }));
       return response.data.isAssigned;
    } catch (error) {
        console.error(error);
        return false;
    }
};

когда я console.info(response.data.isAssigned) внутри функции, он возвращает true или false в зависимости от результата запроса правильно, но когда я хочу использовать его в шаблоне, функция возвращает «[object Promise]», а не true или ложь.

Это мой код внутри шаблона:

<tr v-for = "(detail, index) in details" :key = "index">
<td class = "align-middle" >{{ index + 1 }}</td>        
<td class = "align-middle" colspan = "3">
<div v-if = "isAssigned(detail.issues.id)">
     <span class = "text-success">Assigned</span>
</div>
<div v-else>
     <span class = "text-danger">Not Assigned</span>
</div>
</td>
</tr>

Он всегда возвращает true.

Функция асинхронная, поэтому вам нужно ее где-то await.

deceze 25.02.2024 08:19

я использовал ожидание при получении результата запроса и сохранении его в ответ.

Newbie 25.02.2024 08:24

@Newbie Вам нужно использовать его везде, где вы имеете дело с обещаниями, «асинхронность» заразительна. Поскольку в шаблоне его использовать нельзя, сюда он не подходит.

Estus Flask 25.02.2024 10:47
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
125
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Вам следует загрузить данные перед их отображением пользователю:

const loaded = ref(false);
onMounted(async()=>{
  await Promise.all(details.map(async d => d.isAssigned = await isAssigned(d.issues.id));
  loaded.value = true;
}
<template v-if = "loaded">
<tr v-for = "(detail, index) in details" :key = "index">
<td class = "align-middle" >{{ index + 1 }}</td>        
<td class = "align-middle" colspan = "3">
<div v-if = "detail.isAssigned">
     <span class = "text-success">Assigned</span>
</div>
<div v-else>
     <span class = "text-danger">Not Assigned</span>
</div>
</td>
</tr>
</template>

Поскольку isAssigned не является частью детализации, я не могу использовать его напрямую с детализацией, но нашел решение на основе вашей идеи. Спасибо!

Newbie 25.02.2024 11:39

Асинхронные функции возвращают выполненное обещание, если оператор return намеревается вернуть обычное значение, отличное от обещания.

Это возвращаемое значение должно обрабатываться с помощью await или через механизм Promise.

let res = await myAsyncFunc()
console.info(res)

//or

let res = myAsyncFunc()
res.then((resolved => console.info(resolved)))

Пропущена буква "а" в ожидании...

Stretsh 25.02.2024 13:13

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