对JavaScript Promise/async/await的一些理解2

本文介绍了一种使用JavaScript的fetch API结合async/await语法来从远程URL获取图片并将其显示在网页上的方法。同时探讨了如何正确处理返回的Promise,并通过示例代码展示了常见错误及其解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在http://jsfiddle.net/,下面这段js可以正常输出一个图片:

fetch('http://fiddle.jshell.net/img/logo.png')
.then(response => response.blob())
.then(myBlob => {
  let objectURL = URL.createObjectURL(myBlob);
  let image = document.createElement('img');
  image.src = objectURL;
  document.body.appendChild(image);
})
.catch(e => {
  console.log('There has been a problem with your fetch operation: ' + e.message);
});

将Promise修改成await async,结果也是可以的:

async function myFetch() {
  let response = await fetch('http://fiddle.jshell.net/img/logo.png');
  let myBlob = await response.blob();

  let objectURL = URL.createObjectURL(myBlob);
  let image = document.createElement('img');
  image.src = objectURL;
  document.body.appendChild(image);
}
myFetch()
.catch(e => {
  console.log('There has been a problem with your fetch operation: ' + e.message);
});

这样写会报错,原因是myfetch返回的是一个Promise:

async function myFetch() {
  let response = await fetch('http://fiddle.jshell.net/img/logo.png');
  let myBlob = await response.blob();
  return  myBlob;
}
const myBlob = myFetch();
console.log(myBlob);
let objectURL = URL.createObjectURL(myBlob);
let image = document.createElement('img');
image.src = objectURL;
document.body.appendChild(image);

所以要这样加一次await:

async function myFetch() {
  let response = await fetch('http://fiddle.jshell.net/img/logo.png');
  let myBlob = await response.blob();
  return  myBlob;
}

async function main() {
  const myBlob =await myFetch();
  console.log(myBlob);
  let objectURL = URL.createObjectURL(myBlob);
  let image = document.createElement('img');
  image.src = objectURL;
  document.body.appendChild(image);
}

main();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值