代码报错了,老师帮我看看,Promise.all得到的结果是[undefined,undefined]

代码报错了,老师帮我看看,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)
})

相关截图:

http://img1.sycdn.imooc.com//climg/6034ac59098df58407750171.jpg

咋修改啊

正在回答 回答被采纳积分+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=>{})

好帮手慕星星 2021-02-23 15:39:42

同学你好,调用loadImg方法后,需要将值返回出来,这样promise中才会有值,否则为undefined,修改如下:

http://img1.sycdn.imooc.com//climg/6034b11b096e7c3210000379.jpg

祝学习愉快!

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师