今天在写一个异步小demo的时候,报错说
Uncaught TypeError: Cannot read property ‘then’ of undefined
at 7-async-2.html:36
在仔细的检查以后,发现自己在函数中忘记返回Promise对象了,特此记录一下~
完整代码片段
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app">
<h2>异步demo</h2>
</div>
<script>
const url = 'https://www.baidu.com/img/pc_629ee8886a9c20e7f3cb1d2889c3e45d.gif';
function loadImg(src) {
const p = new Promise(
(resolve, reject) => {
const img = document.createElement('img');
const app = document.getElementById('app');
app.appendChild(img);
img.onload = () => {
resolve(img);
}
img.onerror = () => {
const err = new Error(`图片加载失败${src}`)
reject(err);
}
img.src = src;
}
)
// 就是这里忘记返回了
return p;
}
loadImg(url).then(img => {
console.log(img.width);
return img;
}).then(img => {
console.log(img.height);
}).catch(err => console.error(err))
</script>
</body>
</html>