首页 > 解决方案 > 在函数中使用异步时如何放弃承诺?

问题描述

下面的代码使用了一个简单的 Promise 并且运行良好。

ipToDomain = (ip) => {
  return new Promise((resolve, reject) => {  
    dns.reverse(ip, (err, domain) => {
      if (err) {
        reject(`ERROR: ${err.message}`)
      } else {
        resolve(domain);
      }
    });
  })
}

我想使用 async 将其转换为相同的函数并删除承诺。我的理解是,使用 async 会将我的函数包装在一个 Promise 中。这只是一个学术练习,可以完全理解异步是如何工作的。

请参阅此处,它来自 URL https://javascript.info/async-await

异步函数

让我们从 async 关键字开始。它可以放在函数之前,如下所示:

async function f() {
  return 1;
}

函数前面的“异步”一词意味着一件简单的事情:函数总是返回一个 Promise。其他值自动包装在已解决的承诺中。

例如,此函数返回一个已解决的 Promise,其结果为 1;让我们测试一下:

async function f() {
  return 1;
}

f().then(alert); // 1

…我们可以明确地返回一个承诺,这将是相同的:

async function f() {
  return Promise.resolve(1);
}

f().then(alert); // 1

不幸的是,当我使用异步并放弃承诺时,我无法让这个功能工作。

这不起作用,但它概述了我正在尝试做的事情:

ipToDomain = async (ip) => {
    return dns.reverse(ip, (err, domain) => {
      if (err) {
        reject(`ERROR: ${err.message}`)
      } else {
        resolve(domain);
      }
    });
  })
}

(async () => {
  const result = await ipToDomain('1.2.3.4');
  console.log(result)
})();

标签: javascriptnode.jspromiseasync-await

解决方案


推荐阅读