从同步函数调用异步函数时,幕后会发生什么?

问题描述 投票:0回答:1

答:

const fetchDataASync = async () => {}

乙:

const fetchDataSync = () => { fetchDataAsync() }

我刚刚开始学习 React 中的 useEffect,我注意到如果你将 A 直接放入其回调函数中,你会收到警告:“Effect 回调是同步的,以防止竞争条件。”

但是,如果你把 B 放在那里,它会在没有任何警告的情况下运行,这让我想知道:

  1. 直接调用异步函数和调用调用该异步函数的同步函数有什么区别?
  2. 为什么一个可以引起竞争条件而另一个却不能?
javascript reactjs asynchronous async-await
1个回答
0
投票

直接调用异步函数和调用调用该异步函数的同步函数有什么区别?

主要区别(在您给出的示例中)是您没有返回异步操作完成后将完成的 Promise。

为什么一个可以引起竞争条件而另一个却不能?

您误诊了症状。通过将回调更改为不返回 Promise,您已将问题隐藏在间接层下。您不再收到该特定警告,但危险仍然存在。

© www.soinside.com 2019 - 2024. All rights reserved.