Nig*_*iri 5 javascript async-await babeljs ecmascript-next
我只想等待一个进程完成,不想让函数异步.
请参阅以下代码.
我不得不使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
Run Code Online (Sandbox Code Playgroud)
import UsersService from './UsersService'
class SomeClass {
async someFunction() { //async again!!
const users = await UsersService.getUserList() //await again!!
}
}
Run Code Online (Sandbox Code Playgroud)
这是因为JavaScript的同步特性.如果你想要一个函数同步运行一个异步命令,它会阻塞整个程序,这是非常不受欢迎的,如果它是客户端那么糟糕,如果它是服务器端则很糟糕.因此async存在功能.这些功能从正常流程中取出,这就是为什么await有效.
另一个原因是await+ async是承诺的语法糖.Promise 是异步的,你无法阻止它.这意味着await不会使异步函数同步,它只是保持await函数的其余部分直到它完成.如果它确实阻塞了整个事件循环,想象一下你是否想创建一个可以在客户端之间发送数据的应用程序.您的整个服务器应用程序每次发出异步请求时都会挂起,而不是仅仅使该单个请求异步.
您没有进行异步功能同步,而是让程序的其余部分异步处理它.
因此,不要将其视为async一种要求await,而应将它们视为一种组合(async+ await),因为它们是从根本上发挥作用的.如果你想了解更多有关异步和等待的信息,我强烈建议您阅读我的博客文章,深入了解这一点.
| 归档时间: |
|
| 查看次数: |
481 次 |
| 最近记录: |