当前位置: 首页 > 面试题库 >

如何使用async / await将此回调转换为Promise?

鞠源
2023-03-14
问题内容

以下函数从url获取图像并进行加载,然后返回其宽度和高度:

function getImageData (url) {
  const img = new Image()
  img.addEventListener('load', function () {
    return { width: this.naturalWidth, height: this.naturalHeight }
  })
  img.src = url
}

问题是,如果我做这样的事情:

ready () {
  console.log(getImageData(this.url))
}

我得到,undefined因为该函数运行但图像尚未加载。

仅当照片已加载且宽度和高度已可用时,如何使用等待/异步返回值?


问题答案:

如何使用async/ await将此回调函数转换为Promise?

你不知道与往常一样,您可以使用newPromise构造函数。没有语法糖。

function loadImage(url) {
  return new Promise((resolve, reject) => {
    const img = new Image();
    img.addEventListener('load', () => resolve(img));
    img.addEventListener('error', reject); // don't forget this one
    img.src = url;
  });
}

仅当照片已加载且宽度和高度已经可用时,如何使用await/ async记录值?

你可以做

async function getImageData(url) {
  const img = await loadImage(url);
  return { width: img.naturalWidth, height: img.naturalHeight };
}
async function ready() {
  console.log(await getImageData(this.url))
}


 类似资料:
  • 问题内容: 我正在使用播放框架和Apache Kafka。 我有一个POST方法,它将消息发送到Kafka。Kafka有一个API方法 public java.util.concurrent.Future send(ProducerRecord记录,回调回调) 其中Javadoc说 异步将记录发送到主题,并在确认发送后调用提供的回调。 我正在使用play框架公开此功能。我想从Controller方

  • 我正在使用play框架和Apache Kafka。 我有一个POST方法,它向Kafka发送消息。Kafka有一个API方法 公共java.util.concurrent。未来发送(生产记录记录、回调) 其中Javadoc说 异步发送记录到主题,并在发送被确认时调用提供的回调。 我将使用play框架公开此功能。我想返回一个<代码>promise

  • 我有下面的curl,它成功地将我登录到一个网站。它返回一个302和一个cookie: 不幸的是,我必须插入真正的用户名 我想使用将其转换为Python3代码。所以我做了这个代码: 但是我从Python3代码(200)得到的响应与我从Curl(302)得到的响应不匹配。这意味着目标服务器感觉到两个请求之间的差异。 如何将curl转换为Python3,它发送完全相同的底层HTTP请求?

  • 问题内容: 为了熟悉,我在Chrome中尝试了以下代码: 但不保存结果(字符串);而是持有一个需要再次等待的。这段代码确实给了我响应字符串: 如何使用await从函数返回实际的响应字符串? 问题答案: 要么 要么 这只是编写相同逻辑的另一种方法。

  • 我已经复习了/,在复习了几篇文章之后,我决定自己测试一下。然而,我似乎无法理解为什么这不起作用: 控制台输出以下内容(节点V8.6.0): >外:“对象承诺” >内部:嘿那里 为什么函数内部的日志消息会在之后执行?我认为创建/的原因是为了使用异步任务执行同步执行。 有没有一种方法可以使用函数内部返回的值,而不用后面的?

  • 问题内容: 我想使用Promise,但是我有一个类似以下格式的回调API: 1. DOM加载或其他一次事件: 2.普通回调: 3.节点样式回调(“ nodeback”): 4.带有节点样式回调的整个库: 如何在promise中使用API​​,如何“承诺”它? 问题答案: 承诺有状态,它们从待定状态开始,可以解决: 完成 意味着计算成功完成。 拒绝 表示计算失败。 承诺返回函数 绝不应该抛出,而应该