【JS】FileReader.result不能给变量赋值吗
本帖最后由 lzn970721 于 2019-10-25 11:22 编辑用FileReader读取图片转成Base64,但是给变量赋值就赋值不上,代码如图
输出的temp一直是空字符串 但是在if里面直接输出reader.result却有值
已解决 用async/await和Promise技术解决了 onload是异步事件函数 你这样直接return是不会执行到onload里面的 硬日菊花憋样红 发表于 2019-10-24 09:07
onload是异步事件函数 你这样直接return是不会执行到onload里面的
那请问要怎样才能赋值呀 我想通过ajax传到后台 本帖最后由 15774211127 于 2019-10-24 09:21 编辑
为啥temp是空呢,因为alert(temp);执行在temp=xxx之前
为啥alert先执行呢,因为onload是异步的,执行到onload的时候不会进入function内部,而是直接向下执行,然后就遇到了alert,这时temp当然是空
为啥if里面reader1.result能有值呢,因为reader1.result本身就有内容,然后它在onload外面,所以当然有值
哪怎么解决呢,当然使用回调地狱:Dweeqw
15774211127 发表于 2019-10-24 09:17
为啥temp是空呢,因为alert(temp);执行在temp=xxx之前
为啥alert先执行呢,因为onload是异步的,执行到onl ...
那要怎么样才能让onload先执行呀 lzn970721 发表于 2019-10-24 09:21
那要怎么样才能让onload先执行呀
使用回调地狱
一层一层回调回去;www 15774211127 发表于 2019-10-24 09:22
使用回调地狱
一层一层回调回去
有点没太搞懂 这个onload在哪里写回调函数{:1_932:} 以下不是标准代码,只是描述下,用中文不知道怎么表达
function imgToString(id, callback){
// 此处省略n多代码
onload = function(){
callback(reader1.result); //这里记得做校验,
}
// 此处省略n多代码
}
// 这里是你调用的地方
function xxx(){
imgToString(x,function(){
// 这里写ajax
})
} 15774211127 发表于 2019-10-24 10:07
以下不是标准代码,只是描述下,用中文不知道怎么表达
function imgToString(id, callback){
// 此处 ...
大概是明白了 不过imgToString(x,function(){...... }) 这里的ajax里我要怎么获取到这个result呀
页:
[1]