Javascript 声明为async的方法的正确语法是什么?
在一次回顾中,我偶然发现了以下ES6方法:Javascript 声明为async的方法的正确语法是什么?,javascript,async-await,es6-class,Javascript,Async Await,Es6 Class,在一次回顾中,我偶然发现了以下ES6方法: async getUsers(res) { User.findAll().then(users => res.json(users)); } 对我来说,这辆车似乎有问题。我本以为会发生以下情况: async getUsers(res) { return User.findAll().then(users => res.json(users)); } 但是,我知道async有很多技巧,比如自动包装承诺,所以我的直觉正确吗?只要调用
async getUsers(res) {
User.findAll().then(users => res.json(users));
}
对我来说,这辆车似乎有问题。我本以为会发生以下情况:
async getUsers(res) {
return User.findAll().then(users => res.json(users));
}
但是,我知道async有很多技巧,比如自动包装承诺,所以我的直觉正确吗?只要调用方不需要访问异步检索的值,编写的代码(没有返回值)就可以了
首先,只有计划在函数内部使用wait
时,才需要将async
作为函数定义的一部分。如果未在内部使用wait
(代码未显示),则不需要定义的async
部分。所以,可能就是这样:
getUsers(res) {
User.findAll().then(users => res.json(users));
}
其次,如果调用方希望在getUsers()
函数上使用wait
,那么它需要返回一个承诺(如您所建议的)。如果调用者不使用wait
,或者需要访问返回值,则不需要return
。因此,如果您想在此函数上使用wait
,那么它可能应该是:
getUsers(res) {
// return promise so caller can get async value
return User.findAll().then(users => {
res.json(users);
return users; // return value so caller can get access to the value
});
}
因此,只要调用方不希望从该函数中得到异步返回值,原始代码就可以了(这在这里是可能的,因为异步操作的结果是通过res.json()发送的)
这可能是唯一需要的结果。就wait/async而言,您只需从计划使用wait的函数返回一个承诺即可
重述:
async
仅当您计划在函数中使用wait
时才需要。您的函数可能根本不需要async
关键字
仅当调用方希望能够通过传统的f().then()
或通过let x=wait f()
访问异步响应时,才需要返回的承诺
调用方可以wait
一个未标记为async
的函数。wait
将从函数中获取返回值,如果返回值不是承诺,则将其包装为已解析的承诺。如果是承诺,则将等待其解析
仅供参考,这是一个非常好的、简短而甜蜜的例子,以及它们如何与承诺互动。async
不是ES6,而是ES7什么是res
?顺便说一句,如果没有任何等待
-你根本不需要async
。@zerkms可能表达了回应object@zerkms事实上,res是一个快速响应对象,用户将是一个sequelize模型(返回承诺)因此:1.应该有return
确实2.你不需要async
非常好的答案。这就是为什么这段代码充满了竞争。