我使用的应用程序几乎在每次点击按钮时都会触发分析事件,虽然这些事件会触发对分析服务器的网络调用,但我们一直没有使用await,因为1)我们并不真正关心此调用是否失败,2)当我们避免在每次点击按钮时等待网络调用时,它会使我们的UI更快。这是不好的做法吗?
await
jutyujz01#
在继续之前,你不需要await这些调用,但是如果你关心正确处理错误,你应该附加一个.catch()调用。添加一个.catch()调用将允许你的应用程序逻辑不间断地继续,同时仍然允许你处理错误。如果对错误没有什么可做的(没有重试,没有报告,什么都没有),那么你可以让拒绝过去。每次你创建一个没有await和.catch()的承诺,就相当于调用一个没有try-catch Package 器的函数,如果你觉得可以,那就可以了。我个人建议至少添加一个.catch(console.error)或者甚至.catch(() => {}),要知道.catch(() => {})会自动丢弃任何拒绝,所以只有当你 * 真的真的*不在乎结果时才使用它。
.catch()
.catch(console.error)
.catch(() => {})
h7wcgrx32#
我认为这主要取决于你的期望/目标。如果调用不需要完全完成就可以使用你的应用程序,那么使用await可能对你的情况毫无用处。一般来说,当你必须等待响应完成才能继续执行应用程序时,await/async是需要的。然而,正如其他人提到的,你应该考虑你的错误策略。如果一个Firebase调用失败了怎么办?你需要恢复一些东西,通知你的用户,或者其他什么吗?通常,你应该总是有一个错误策略。所以,你不必使用await/async,但是你至少应该在你的调用之后使用.catch()来管理错误状态。
ql3eal8s3#
不调用await没有什么错。首先,什么是await,它只是一个语法上的糖,用同步的方式来表达异步操作,经验法则是:仅当以下任一条件为真时,使用await才有意义:1.你想在事情做完后马上做1.您需要分配从其Promise返回的值否则它对await没有意义。
3条答案
按热度按时间jutyujz01#
在继续之前,你不需要
await
这些调用,但是如果你关心正确处理错误,你应该附加一个.catch()
调用。添加一个.catch()
调用将允许你的应用程序逻辑不间断地继续,同时仍然允许你处理错误。如果对错误没有什么可做的(没有重试,没有报告,什么都没有),那么你可以让拒绝过去。每次你创建一个没有
await
和.catch()
的承诺,就相当于调用一个没有try-catch Package 器的函数,如果你觉得可以,那就可以了。我个人建议至少添加一个
.catch(console.error)
或者甚至.catch(() => {})
,要知道.catch(() => {})
会自动丢弃任何拒绝,所以只有当你 * 真的真的*不在乎结果时才使用它。h7wcgrx32#
我认为这主要取决于你的期望/目标。如果调用不需要完全完成就可以使用你的应用程序,那么使用await可能对你的情况毫无用处。一般来说,当你必须等待响应完成才能继续执行应用程序时,await/async是需要的。
然而,正如其他人提到的,你应该考虑你的错误策略。如果一个Firebase调用失败了怎么办?你需要恢复一些东西,通知你的用户,或者其他什么吗?通常,你应该总是有一个错误策略。所以,你不必使用await/async,但是你至少应该在你的调用之后使用.catch()来管理错误状态。
ql3eal8s3#
不调用
await
没有什么错。首先,什么是
await
,它只是一个语法上的糖,用同步的方式来表达异步操作,经验法则是:仅当以下任一条件为真时,使用await
才有意义:1.你想在事情做完后马上做
1.您需要分配从其Promise返回的值
否则它对
await
没有意义。