如何用Javascript编写预加载函数?

如何用Javascript编写预加载函数?,javascript,Javascript,如何编写一个函数,在调用另一个函数之前加载函数中的所有内容?例如,(类似于P5.js),我想实现一个预加载函数,在执行设置函数之前加载任何需要加载的内容(即图像) let someImage; function preload() { someImage = new Image(); someImage.src = "some URL"; someImage.onload = imageLoaded; } function imageLoaded() {

如何编写一个函数,在调用另一个函数之前加载函数中的所有内容?例如,(类似于P5.js),我想实现一个预加载函数,在执行设置函数之前加载任何需要加载的内容(即图像)

let someImage;
function preload() {
   someImage = new Image();
   someImage.src = "some URL";
   someImage.onload = imageLoaded;
}
function imageLoaded() {
   //this is called before setup
}
function setup() {
   //I can safely assume everything is properly loaded
}

在Javascript中实现这一点的最佳方法是让预加载函数返回承诺,然后将所有代码放入承诺成功返回中。如果您希望按特定顺序调用函数,那么可以执行承诺链

let someImage;
function preload() {
   someImage = new Image();
   someImage.src = "some URL";
   someImage.onload = imageLoaded;
   return new Promise((resolve)=>resolve());
}
preload().then(function(){
    setup();
});
function setup() {
}


确保在
.src
之前分配事件,您可以执行图像的函数
.onload

函数预加载(url,doneFunc){
const img=新图像;
img.onload=()=>{
doneFunc();
}
img.onerror=()=>{
log(img.src+'load failure');
}
img.src=url;
}
预加载('yourImg.png',()=>{
log('executecode here');

});要预加载图像,实际上需要注意提供值的顺序。如果在
onload
之前添加
src
,则图像可能会在
onload
功能运行之前加载

令人烦恼的是,这比听起来更可能。同样的事情也适用于

我会这样做:

让一些人想象;
函数预加载(){
someImage=新图像();
返回新承诺((解决、拒绝)=>{
//这将在.then函数中传递事件对象
someImage.onload=解析;
//如果要处理未加载的图像,则为可选
//someImage.onerror=拒绝;
someImage.src=“一些URL”;
});
}
//现在,你可以用两种方式来完成这项工作,这取决于你的船的漂浮物
//您可以将设置函数更改为异步/等待
异步函数设置(){
试一试{
让imageResult=等待预加载();
imageLoaded();
//原始设置函数中的代码
}捕获(e){
//处理错误
}
}
//或者您可以使用回调进行承诺链接
预载
。然后(loadEvent=>imageLoaded())
。然后(()=>setup());
//.catch(error=>handleError(error));//可选;

使用async Wait,您就可以做到这一点

let someImage="i-m-a--g-e";
let load = true

function  preload() {
  console.log("running preload",someImage)
   return new Promise((resolve,reject)=>{
     
        if(load){ return resolve()}else{return reject()}
   }
                     );
}

function setup(){ 
console.log("running setup")
}

(async () => {
    await preload();
    setup();
})();

这是否回答了您的问题?这回答了你的问题吗?不完全是…解决需要在加载时发生。。。Java不是JavaScript。