首页 > 解决方案 > 如果我在异步调用中省略“等待”,操作是否仍会完成?

问题描述

这是关于 Javascript 和最新的 Node.JS。

我有一个异步操作(在这种特殊情况下通过 Axios 库进行 HTTP 调用,但问题是一般性的)。我不在乎该操作的结果是什么。如果它成功 - 很好。如果它失败了 - 无论如何。但我知道这可能需要一段时间才能完成,我不能等那么久。所以我想“解雇并忘记”。

现在,第一个想法是简单地await从调用中删除。我会得到一个Promise我很快就会忘记的东西,并且该操作将按自己的条件完成。我认为这应该可行,但是...感觉有点不对劲。我不能把我的手指放在它上面,但它困扰着我。

这是安全的,还是我最好还是坚持Promise并在计时器或其他东西中检查它的结果,即使我不会对它们做任何事情?

标签: javascriptnode.jspromiseasync-await

解决方案


如果您对成功的 HTTP 请求的通知不感兴趣,您仍然必须考虑 HTTP 请求由于某种原因失败时会发生什么(服务器没有响应,没有互联网连接,...)。

你不需要保留一个 Promise 对象,你甚至不需要async,但你至少应该处理一个 Promise 拒绝,否则你会得到一个“未处理的 Promise Rejection”异常。

这样做:

fetch(url).catch(err => { /* deal with error */ });

如果您也不关心错误(我对此表示怀疑),那么您可以这样做:

fetch(url).catch(Boolean);

这样你就得到了一个永远不会拒绝的承诺。所以你可以忽略它。


推荐阅读