Код, как написано (без return
), вероятно, прекрасен, если вызывающему абоненту не нужен доступ к асинхронно полученному значению.
Прежде всего, async
необходим как часть определения функции ТОЛЬКО, если вы планируете использовать await
внутри функции. Если вы не используете await
внутри (код которого не отображается), то часть определения async
не требуется. Таким образом, это, вероятно, может быть именно это:
getUsers(res) {
User.findAll().then(users => res.json(users));
}
Во-вторых, если абонент хочет использовать await
на функцию getUsers()
, то он должен вернуть обещание (как вы предложили). Если вызывающий абонент не использует await
с ним или иным образом нуждается в каком-либо доступе к возвращаемому значению, то return
не требуется. Таким образом, если вы хотите использовать await
этой функции, то это, вероятно, следует это:
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
});
}
Таким образом, исходный код может быть просто прекрасно, пока абонент никогда не ожидает асинхронное возвращаемое значения из этой функции (что возможно здесь, потому что результат операции async отправляется с res.json()
, и это может быть единственным результатом, который необходим. Что касается await/async, вам нужно только вернуть обещание от функций, которые вы планируете использование ждут на
Чтобы резюмировать:.
async
необходим, только если вы планируете использовать await
внутри функции. Вероятно, ваша функция вообще не нуждается в ключевом слове async
.
- Возвращаемое обещание необходимо только в том случае, если вызывающий абонент хочет получить доступ к асинхронному ответу либо через традиционный
f().then()
, либо через let x = await f()
.
- Вызывающий может
await
функция, которая не помечена как async
. await
получит возвращаемое значение от функции, и, если возвращаемое значение не является обещанием, оно обернет его в разрешенное обещание. Если это обещание, оно будет ждать его разрешения.
FYI, это очень хороший, короткий и сладкий review of async/await и как они взаимодействуют с обещаниями.
'async' не ES6, это ES7 – smnbbrv
Что такое' res'? Btw, если нет никакого 'ожидания '- вам вообще не нужно' async'. – zerkms
@zerkms Вероятно, выраженный объект ответа –