lzn970721 发表于 2019-10-24 09:04

【JS】FileReader.result不能给变量赋值吗

本帖最后由 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外面,所以当然有值
哪怎么解决呢,当然使用回调地狱:Dweeqw


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先执行呀

使用回调地狱
一层一层回调回去;www

lzn970721 发表于 2019-10-24 09:59

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

有点没太搞懂 这个onload在哪里写回调函数{:1_932:}

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呀
页: [1]
查看完整版本: 【JS】FileReader.result不能给变量赋值吗