我想做一個基本的檢查,看看圖像是視網膜,並有肖像比例。我有所有檢查功能工作得很好。我的問題是,在最終的函數,應該返回我從我的支票得到的布爾值,它返回[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 - 使用承諾(https://developer.mozilla.org/ en-US/docs/Web/JavaScript/Guide/Using_promises)瞭解有關承諾的更多信息。 '。那麼(res => res)'是多餘的,你不需要它。 *「我的問題是,在應該返回布爾值的最終函數中」*這是不可能的。您不能將異步進程轉換爲同步進程。 –