使用async/await而不是promise来处理Javascript中的图像加载
我已经写了一个基于承诺的加载图像函数使用async/await而不是promise来处理Javascript中的图像加载,javascript,async-await,Javascript,Async Await,我已经写了一个基于承诺的加载图像函数 function loadImage() { const img = new Image(); return new Promise((resolve, reject) => { img.addEventListener("load", () => { resolve(); }); img.addEventListener("error", () => {
function loadImage() {
const img = new Image();
return new Promise((resolve, reject) => {
img.addEventListener("load", () => {
resolve();
});
img.addEventListener("error", () => {
reject();
});
img.src = 'assets/myImg.jpg';
});
}
loadImage.then(
() => console.log('image loaded'),
() => console.error('image did not load')
);
我想使用async/await转换它,但实际上我很难做到这一点。你知道怎样才能做到吗 只需做一些更改,就可以让它正常工作。 异步等待端通常会取代.then链接 首先,保持loadImage函数不变,并定义一个附加的异步函数来运行异步等待代码。我已经把这叫做主要的。然后可以创建一个变量,例如LoadeImage,然后等待promise函数。在这种情况下,这将暂停执行下一步,即控制台日志,直到承诺已解决/拒绝并加载映像
async function main() {
let loadedImage = await loadImage();
console.log(loadedImage);
}
main()
此外,如果您希望实际将一个值返回到LoadeImage变量中,因为此时它将是未定义的,那么您可以在promise resolve中放置一个值。例如:
解析“图像已加载”只需做几处更改,即可使其正常工作。 异步等待端通常会取代.then链接 首先,保持loadImage函数不变,并定义一个附加的异步函数来运行异步等待代码。我已经把这叫做主要的。然后可以创建一个变量,例如LoadeImage,然后等待promise函数。在这种情况下,这将暂停执行下一步,即控制台日志,直到承诺已解决/拒绝并加载映像
async function main() {
let loadedImage = await loadImage();
console.log(loadedImage);
}
main()
此外,如果您希望实际将一个值返回到LoadeImage变量中,因为此时它将是未定义的,那么您可以在promise resolve中放置一个值。例如:
解析“图像已加载”您可以等待loadImage函数,但新的图像对象不使用承诺,它使用您用承诺包装的事件
在异步函数内部,您可以等待loadImage函数,如下所示:
async function loadImage() {
const img = new Image();
return new Promise((resolve, reject) => {
img.addEventListener("load", () => {
resolve();
});
img.addEventListener("error", () => {
reject();
});
img.src = 'assets/myImg.jpg';
});
}
async function doSomething() {
try {
await loadImage();
console.log("image loaded");
} catch(e) {
console.error("image did not load");
}
}
您可以等待loadImage函数,但新的Image对象不使用承诺,它使用您用承诺包装的事件
在异步函数内部,您可以等待loadImage函数,如下所示:
async function loadImage() {
const img = new Image();
return new Promise((resolve, reject) => {
img.addEventListener("load", () => {
resolve();
});
img.addEventListener("error", () => {
reject();
});
img.src = 'assets/myImg.jpg';
});
}
async function doSomething() {
try {
await loadImage();
console.log("image loaded");
} catch(e) {
console.error("image did not load");
}
}
你想取代新的承诺。。使用异步/等待?你不能。你想取代那个新的承诺吗?你想取代这个新的承诺。。使用异步/等待?你不能。你想取代那个新的承诺吗。。。??