javascript – 重构承诺和promise.all与异步等待es2017
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 重构承诺和promise.all与异步等待es2017,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2262字,纯文字阅读大概需要4分钟。
内容图文
![javascript – 重构承诺和promise.all与异步等待es2017](/upload/InfoBanner/zyjiaocheng/782/a55f70cc6a87407eba9b5c78c5f8b756.jpg)
我有一个照片上传处理程序的工作版本,但我想看看如何使用async await.以下是我使用promise的工作代码.
onChangePhotos = (e) => {
e.preventDefault()
let files = e.target.files
if(files.length === 0) { return }
const allow_photos_length = this.state.selectedAlbum.photos.length + files.length
if(allow_photos_length > this.state.maxPhoto) {
alert(`Maximum only ${maxPhoto} photos per album!`)
return
}
this.setState({
uploading_photo: true
})
let promises = []
for(const file of files){
promises.push(UploadApi.uploadPhoto('company', file))
}
Promise.all(promises)
.then(responses => {
let next_photos = []
for(const [index, response] of responses.entries()) {
const { upload_id, url } = response
next_photos.push({photo_id: upload_id, url})
if(responses.length === index + 1){
this.setState({
uploading_photo: false
})
}
}
this.setState({
selectedAlbum: {
...this.state.selectedAlbum,
photos: [
...this.state.selectedAlbum.photos,
...next_photos
]
}
})
})
.catch(err =>{
this.setState({ uploading_photo: false })
alert('failed to upload! Error: ' + err)
})
}
我将它转换为异步等待,webpack没有显示任何错误,但是当我尝试在我的webapp上测试时,发现当我执行console.log(这个)时没有定义.
下面是我的异步等待尝试:
onChangePhotos = async (e) => {
e.preventDefault()
let files = e.target.files
if(files.length === 0) { return }
this.setState({
uploading: true
})
let promises = []
for(const file of files){
const uploadPhotoPromise = await UploadApi.singlePhoto(file)
promises.push(uploadPhotoPromise)
}
try {
const responses = await Promise.all(promises)
let next_photos = []
for(const [index, response] of responses.entries()) {
const { upload_id, url } = response
next_photos.push({photo_id: upload_id, url})
if(responses.length === index + 1){
this.setState({
uploading: false
})
}
}
this.setState({
selectedAlbum: {
...this.state.selectedAlbum,
photos: [
...this.state.selectedAlbum.photos,
...next_photos
]
}
})
} catch(err) {
this.setState({ uploading: false })
alert('failed to upload! Error: ' + err)
}
}
有什么问题?
解决方法:
不确定错误是什么意思,因为缺乏信息,但你的promises数组没有承诺,因为你已经使用await:
我建议改变这个:
let promises = []
for(const file of files){
const uploadPhotoPromise = await UploadApi.singlePhoto(file)
promises.push(uploadPhotoPromise)
}
至:
const promises = [];
for(const file of files){
promises.push(UploadApi.singlePhoto(file))
}
内容总结
以上是互联网集市为您收集整理的javascript – 重构承诺和promise.all与异步等待es2017全部内容,希望文章能够帮你解决javascript – 重构承诺和promise.all与异步等待es2017所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。