Javascript 这是在js中进行回调的正确方法吗? 函数优先(i,回调){ var img_full_url=S3.getSignedUrl('getObject'{ 桶:桶, 关键字:result.data[i].picture\u url }); 回调(i,img\u

Javascript 这是在js中进行回调的正确方法吗? 函数优先(i,回调){ var img_full_url=S3.getSignedUrl('getObject'{ 桶:桶, 关键字:result.data[i].picture\u url }); 回调(i,img\u,javascript,callback,Javascript,Callback,这是在js中进行回调的正确方法吗? 函数优先(i,回调){ var img_full_url=S3.getSignedUrl('getObject'{ 桶:桶, 关键字:result.data[i].picture\u url }); 回调(i,img\u full\u url); } 第二个函数(i,img\u full\u url,回调){ $('img#u holder')。在(`)之后; 收回(i); } 第三个函数(i,回调){ var img=document.querySelect

这是在js中进行回调的正确方法吗?
函数优先(i,回调){
var img_full_url=S3.getSignedUrl('getObject'{
桶:桶,
关键字:result.data[i].picture\u url
});
回调(i,img\u full\u url);
}
第二个函数(i,img\u full\u url,回调){
$('img#u holder')。在(`)之后;
收回(i);
}
第三个函数(i,回调){
var img=document.querySelector(`img${i}`);
img.addEventListener('load',函数(事件){
var dataUrl=getDataUrl(event.currentTarget);
回调(i,dataUrl);
});
}
函数forth(i,dataUrl){
zip.file(`${result.data[i].picture\u url}.txt`,dataUrl);
}

对于(var i=0;JS世界已经转向承诺,因为所谓的
回调地狱
,这就是你所说的
纠结
荒谬的
。继续阅读
承诺
异步/wait
。这看起来确实很可笑,因为它是:这就是为什么承诺有点取代了各地的回调。链接是因为
第一个
第二个
之间没有异步,所以您使它变得比需要的更复杂be@JaromandaX虽然这是事实,但我认为这是一个说明性的例子。此外,还可以很容易地让非异步函数对其行为的某些可自定义部分进行回调嗯。
function first(i, callback){
    var img_full_url = S3.getSignedUrl('getObject', {
      Bucket: BUCKET,
      Key: result.data[i].picture_url
    });
    callback(i, img_full_url);
  }

  function second(i, img_full_url, callback){
    $('#img_holder').after(`<img id="img${i}" src= "${img_full_url}" crossorigin>`);
    callback(i);
  }

  function third(i, callback){
    var img = document.querySelector(`#img${i}`);
    img.addEventListener('load', function(event) {
      var dataUrl = getDataUrl(event.currentTarget);
      callback(i, dataUrl);
    });
  }

  function forth(i, dataUrl){
    zip.file(`${result.data[i].picture_url}.txt`, dataUrl);
  }

  for(var i = 0; i<3; i++){
    first(i, function(i, img_full_url){
      second(i, img_full_url, function(i){
        third(i, function(i, dataUrl){
          forth(i, dataUrl);
        });
      });
    });
  }