吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2362|回复: 8
收起左侧

[已解决] 【JS】FileReader.result不能给变量赋值吗

[复制链接]
lzn970721 发表于 2019-10-24 09:04
本帖最后由 lzn970721 于 2019-10-25 11:22 编辑

用FileReader读取图片转成Base64,但是给变量赋值就赋值不上,代码如图

输出的temp一直是空字符串 但是在if里面直接输出reader.result却有值

已解决 用async/await和Promise技术解决了

代码

代码

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

LaoJII 发表于 2019-10-24 09:07
onload是异步事件函数 你这样直接return是不会执行到onload里面的
 楼主| lzn970721 发表于 2019-10-24 09:13
硬日菊花憋样红 发表于 2019-10-24 09:07
onload是异步事件函数 你这样直接return是不会执行到onload里面的

那请问要怎样才能赋值呀 我想通过ajax传到后台
15774211127 发表于 2019-10-24 09:17
本帖最后由 15774211127 于 2019-10-24 09:21 编辑

为啥temp是空呢,因为alert(temp);执行在temp=xxx之前
为啥alert先执行呢,因为onload是异步的,执行到onload的时候不会进入function内部,而是直接向下执行,然后就遇到了alert,这时temp当然是空
为啥if里面reader1.result能有值呢,因为reader1.result本身就有内容,然后它在onload外面,所以当然有值
哪怎么解决呢,当然使用回调地狱


 楼主| lzn970721 发表于 2019-10-24 09:21
15774211127 发表于 2019-10-24 09:17
为啥temp是空呢,因为alert(temp);执行在temp=xxx之前
为啥alert先执行呢,因为onload是异步的,执行到onl ...

那要怎么样才能让onload先执行呀
15774211127 发表于 2019-10-24 09:22
lzn970721 发表于 2019-10-24 09:21
那要怎么样才能让onload先执行呀

使用回调地狱
一层一层回调回去
 楼主| lzn970721 发表于 2019-10-24 09:59
15774211127 发表于 2019-10-24 09:22
使用回调地狱
一层一层回调回去

有点没太搞懂 这个onload在哪里写回调函数
15774211127 发表于 2019-10-24 10:07
以下不是标准代码,只是描述下,用中文不知道怎么表达
function imgToString(id, callback){
   // 此处省略n多代码
   onload = function(){
    callback(reader1.result); //这里记得做校验,
  }
  // 此处省略n多代码
}

// 这里是你调用的地方
function xxx(){
  imgToString(x,function(){
   // 这里写ajax
})
}
 楼主| lzn970721 发表于 2019-10-24 10:24
15774211127 发表于 2019-10-24 10:07
以下不是标准代码,只是描述下,用中文不知道怎么表达
function imgToString(id, callback){
   // 此处 ...

大概是明白了 不过imgToString(x,function(){  ......   }) 这里的ajax里我要怎么获取到这个result呀
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-27 00:27

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表