Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何等待image.onload事件函数中设置image.src?_Javascript_Typescript_Asynchronous_Browser - Fatal编程技术网

Javascript 如何等待image.onload事件函数中设置image.src?

Javascript 如何等待image.onload事件函数中设置image.src?,javascript,typescript,asynchronous,browser,Javascript,Typescript,Asynchronous,Browser,在我的浏览器javascript for new image()对象中,对于onload事件,我首先在用户选择图像文件后设置image.src;然后读取图像对象的大小 但是,似乎在正确设置src之前就发生了读取。我碰巧发现了一个修复方法,即调用函数两次。但这个解决方案似乎是一个非常糟糕的主意 请让我知道如何以标准方式修复它。我的环境接受Typescript var imgLoaded=false; var file = document.getElementById("fileInp

在我的浏览器javascript for new image()对象中,对于onload事件,我首先在用户选择图像文件后设置image.src;然后读取图像对象的大小

但是,似乎在正确设置src之前就发生了读取。我碰巧发现了一个修复方法,即调用函数两次。但这个解决方案似乎是一个非常糟糕的主意

请让我知道如何以标准方式修复它。我的环境接受Typescript

var imgLoaded=false;
 var file = document.getElementById("fileInput").files[0];
      for(let i=0;i<2;i++){    
          call2(file);
         }
      

   function call2(file) {
      var reader = new FileReader();
      reader.readAsDataURL(file);

      reader.onload = function () {
          if(!imgLoaded){ 
              imgLoaded=true;   img.src=(reader.result).toString();}
         else{
        console.log(img.width);
      }}

var imgLoaded=false;
var file=document.getElementById(“fileInput”).files[0];

对于(设i=0;i我自己至少找到了一个更好的解决方案。尽管我不知道这是否是一个标准


 var file = document.getElementById("fileInput").files[0];
          call2(file);
      

    function call2(file) {
      var reader = new FileReader();
      reader.readAsDataURL(file);

      reader.onload =async function () {
         img.src= await (reader.result).toString();
         console.log(await img.width);
      }}
在某种程度上,你可以取代
file=document.getElementById(“fileInput”).files[0];
使用
file=event.target.files[0]
并在call2中使用它,还应将事件传递给call2

例如:在html中:
,然后在js
函数调用2(e){let file=e.target.files[0]…}

中,可以通过一种方式将
file=document.getElementById(“fileInput”).files[0];
替换为
file=event.target.files[0]
并在call2中使用它,还应将
事件传递给call2@RayaNasiri,很抱歉,我不知道如何声明“事件”。你能再多写一点吗?用html:
,然后用js
函数调用2(e){let file=e.target.files[0]…}
@RayaNasiri,非常感谢。我会尝试一下。所以接受我的答案:)