猿问

怎么 同步取得 fileReader onload 处理的数据

.on('xxxxx', function(){

   fileReader.readAsArrayBuffer(file)  //读完数据 触发 onload

   // 需要传递参数 {"sendData" : data} 到插件流程中  //onload是异步的,data不能同步取得。。

   // 用 while(1){ if (data) break; } 的方式 会卡死

   //  sleep() 还是会 假死 或者 单线程耗CPU, setTimeout() 不执行。。

   

    function sleep(ms) {

        var unixtime_ms = new Date().getTime();

        while(new Date().getTime() < unixtime_ms + ms) {}

    }

    a = 0;   

    setTimeout(function(){console.log('11111');  a = 1 }, 300);

    while ( a == 0 ){

      console.log('0000');

      sleep(100);

   } 

   

   // promise 不能 阻止 顺序执行到插件流程 

   // 进入 一个插件 的处理流程 。。。 

});


fileReader.onload = function(){

  // 处理数据

  // 得到 data = xxxx;  data 是全局变量

};


慕侠2389804
浏览 15881回答 1
1回答

饮歌长啸

可以用&nbsp;promise:function&nbsp;uploadFile(file)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;Promise(function(resolve,&nbsp;reject)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;reader&nbsp;=&nbsp;new&nbsp;FileReader() &nbsp;&nbsp;&nbsp;&nbsp;reader.readAsArrayBuffer(file) &nbsp;&nbsp;&nbsp;&nbsp;reader.onload&nbsp;=&nbsp;function()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resolve(this.result) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}) } uploadFile(file).then(function(result){//处理&nbsp;result})
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答