javascript - 在函数中使用异步时如何放弃承诺?
问题描述
下面的代码使用了一个简单的 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)
})();
解决方案
推荐阅读
- java - 如何最好地避免 java bean 的通配符
- javascript - 将javascript递归异步方法写入对象
- sqlite - 避免 .mode html 中的 html 实体
- extjs - 没有 x-innerhtml 的 Extjs 小部件/组件
- sql - 跨不同表的不同用户详细信息
- c++ - 默认新对齐
- outlook - 使用未经用户身份验证的 Microsoft Graph 和 Daemon 应用程序同步 Microsoft 日历
- javascript - 为什么 java-script 中的 post 不起作用?
- python - 表示降低 Netcdf 分辨率的网格
- jupyter-notebook - JupyterHub 由于“在 30 秒内没有响应”和“后退重新启动失败的容器”而失败