代码报错了,老师帮我看看,Promise.all得到的结果是[undefined,undefined]
相关代码:
const loadImg=(src)=>{
return new Promise((resolve,reject)=>{
const img=new Image();
img.src=src;
img.onload=()=>{resolve(img)};
img.onerror=(e)=>{reject(e)}
// 1.这里不能写成img.onload=resolve(src);
// resolve为函数,后面加括号则会直接执行,resolve(src)会立刻执行
})
}
var imgArr=[`https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1730713693,2130926401&fm=26&gp=0.jpg`,
`https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=2485954775,21433741&fm=26&gp=0.jpg`]
/* 2.array.map(function(currentValue,index,arr), thisValue),会对数组的每一项进行操作,获得新的返回数组,不影响原值
currentValue 必须。当前元素的值
index 可选。当前元素的索引值
arr 可选。当前元素属于的数组对象
可选。对象作为该执行回调时使用,传递给函数,用作 "this" 的值。省略或者传入 null、undefined,那么回调函数的 this 为全局对象。 */
Promise.all(imgArr.map((src)=>{
console.log(src)
loadImg(src); //loadImg会返回promise实例
}))
.then(imgArrPromiseAll=>{
console.log(imgArrPromiseAll) //为什么返回[undefined, undefined]
imgArrPromiseAll.forEach((img)=>{
console.log(img)
document.body.appendChild(img)
})
},e=>{
console.log(e)
})
相关截图:
咋修改啊
11
收起
正在回答 回答被采纳积分+1
2回答
王文辉
2021-02-23 15:44:47
我看了下问答区,找到了答案,由于map中箭头函数的写法错误,没有返回promise实例导致的
箭头函数,多句,没有返回值,默认返回undefined,不是promise对象,所以我修改了下
// 修改一,可以改成单句,去掉花括号,默认返回单句,这里的单句loadImg(src)返回的就是promise对象
Promise.all(imgArr.map((src)=>loadImg)).then(imgArrPromiseAll=>{})
// 修改二,添加return返回值,返回promise对象
Promise.all(imgArr.map((src)=>{return loadImg(src)})).then(imgArrPromiseAll=>{})
4.Vue与React高级框架开发
- 参与学习 人
- 提交作业 239 份
- 解答问题 10739 个
本阶段带你深入前端开发的肌理,通过ES6基础知识和前端主流高级框架的学习,助你快速构建企业级移动webAPP应用,进入职场的终极battle
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星