javascript - 如何从 Vuejs 中的 HTML 访问 promise 结果
问题描述
我正在用 Vuejs 为一个大学项目做一个网站。
该功能的范围是找出一本书是否被设置为收藏,然后返回图标的名称,以便自动设置正确的图标。
为此,我创建了函数setIcon()
:
setIcon: async function (id) {
var favs = await DataService.getFav();
var isFav = favs.find((book) => book.id === id);
if (isFav === undefined) {
return "favorite_border";
}
else
{
return "favorite";
}
}
然后,该函数只需在图标标记内的 HTML 部分中调用。
出于调试的原因,我去掉了图标标签,只保留了一个按钮,所以我可以看到函数的返回值是什么,作为按钮的名称。
<md-button class="md-button" @click.stop="setFav(book.id)">
{{ setIcon(book.id) }}
</md-button>
问题是函数返回的值是 aPromise Object
而不是字符串"favorite_border"
or "favorite"
。
所以我的问题是如何在 HTML 部分访问承诺的结果?
我也试着把.then()
零件放在后面,setIcon()
但结果是一样的
解决方案
你不必使用async
,试试这个:
setIcon: function(id) {
DataService.getFav().then((favs) = >{
var isFav = favs.find((book) = >book.id === id);
if (isFav === undefined) {
return "favorite_border";
} else {
return "favorite";
}
})
}
如果DataService.getFav()
方法没有参数并且得到相同的结果,则应该将结果缓存在另一个方法中,否则每次执行setIcon
都会调用DataService.getFav()
,这是对性能的浪费。
推荐阅读
- python - 使用逗号时python中的语法错误
- laravel - Vue:数据表上的搜索过滤器
- python - 安装对象检测 API 时出错:ImportError: cannot import name 'Cycler'
- python - Slicing a range from a pandas dataframe column using loc
- c++ - 未在 C++ 中显示适当的输出
- java - 用 Java 中的相同消息替换 IBM MQ 消息负载并回复(无 JMS)
- reactjs - 传递表单数据来表达
- python - 我可以使用阶跃函数作为损失函数来训练神经网络吗?
- php - Pdf 轮换问题
- r - 如何在 for 循环中使用 ggplot2 aes_string() 和 cut()?