【发布时间】:2018-03-25 00:04:35
【问题描述】:
我正在尝试进行基本检查以查看图像是否为视网膜并且具有纵向比例。我的所有检查功能都运行良好。我的问题是,在应该返回我从检查中得到的布尔值的最终函数中,它返回了[object Promise]。我不知道为什么当我解决承诺时这没有返回我的布尔值。
当我运行.then(res => console.log(res)) 时,它会输出我的布尔响应,但返回承诺的函数getImageMeta() 只会返回[object Promise],这让我认为承诺实际上并没有得到解决。
如果我能得到一些帮助,那就太好了!
/************************************
Check if image is retina portrait
************************************/
const checkIfPortrait = src => !isRetina(src) ? false : getImageMeta(src).then(res => res);
const isRetina = src => src.indexOf('@2x') !== -1;
const isPortrait = ({ naturalWidth, naturalHeight }) => naturalHeight > naturalWidth ? true : false;
function getImageMeta (src) {
const img = new Image();
img.src = src;
return new Promise((resolve, reject) => {
return img.addEventListener("load", function () {
return resolve(isPortrait(this));
}, false);
});
}
export { checkIfPortrait }
这就是我调用函数的方式:
<img src={media[i].image} alt={media[i].alt} data-portrait={checkIfPortrait(media[i].image)} />
【问题讨论】:
-
查看MDN - Using Promises 以了解有关承诺的更多信息。
.then(res => res)是多余的,你不需要它。 “我的问题是在最终函数中应该返回布尔值” 这是不可能的。您不能将异步进程转换为同步进程。 -
当我在异步函数中除了服务调用之外忘记提及“等待”时出现此错误。添加后解决了。
标签: javascript promise