我只想等待进程完成,不想使函数异步。
请参阅下面的代码。
我必须使 getUserList 异步,因为函数中有一个await 关键字。因此,我还必须编写“await UsersService.getUserList”之类的内容来执行该方法,并且还必须使父函数异步。那不是我想做的。
import xr from 'xr' //a package for http requests
class UsersService {
static async getUserList() {
const res = await xr.get('http://localhost/api/users')
return res.data
}
}
export default UsersService
import UsersService from './UsersService'
class SomeClass {
async someFunction() { //async again!!
const users = await UsersService.getUserList() //await again!!
}
}
这是一个设计选择吗?
这是因为 JavaScript 的同步特性。如果您希望一个函数同步运行异步命令,它会阻塞整个程序,这是非常不可取的,如果是客户端则很糟糕,如果是服务器端则很糟糕。为此原因async
功能存在。这些功能被从正常流程中取出,这就是为什么await
works.
Why?
另一个原因是await
+async
are 语法糖为了承诺。承诺是异步的,你无法阻止它。这意味着什么wait 不会使异步函数同步,它只是保留 wait 函数的其余部分,直到完成。如果它确实阻塞了整个事件循环,想象一下如果您想创建一个在客户端之间发送数据的应用程序。您的整个服务器应用程序每次发出异步请求时都会挂起,而不仅仅是使单个请求异步。
所以这样想吧:
您没有使异步函数同步,而是使程序的其余部分异步以应对它。
所以与其想async
的要求await
,将它们视为一个组合(async
+await
)因为这就是它们的基本工作方式。如果您想了解有关异步和等待的更多信息,我强烈建议您阅读我的博客文章 http://web.archive.org/web/20160609080532/http://blog.vihan.org/index.php/2016/05/16/synchronously-async-ing/对此进行了深入探讨。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)