Kod w stanie, w jakim został napisany (bez numeru return
), jest prawdopodobnie w porządku, o ile osoba dzwoniąca nie potrzebuje dostępu do asynchronicznie pobranej wartości.
Po pierwsze, async
jest potrzebny jako część definicji funkcji TYLKO jeśli planujesz używać await
wewnątrz funkcji. Jeśli nie używasz wewnątrz (którego twój kod nie pokazuje) await
, część definicji definicji async
nie jest potrzebna. Tak, to może być tylko to prawdopodobnie:
getUsers(res) {
User.findAll().then(users => res.json(users));
}
Po drugie, jeśli rozmówca chce wykorzystać await
funkcję getUsers()
, to musi powrócić obietnicę (jak proponowane). Jeśli osoba dzwoniąca nie użyje w tym celu numeru await
lub w inny sposób nie potrzebuje dostępu do wartości zwracanej, wówczas return
nie jest konieczne. Tak więc, jeśli chcesz skorzystać await
na tej funkcji, to prawdopodobnie powinien być tak:
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
});
}
tak, oryginalny kod może być po prostu w porządku tak długo, jak rozmówca nie spodziewa asynchronicznego wartości zwracanej z tej funkcji (co jest możliwe tutaj, ponieważ wynik operacji asynchronicznej jest wysyłany z res.json()
i może to być jedyny wynik, który jest potrzebny.) O ile oczekujemy/asynchronicznie, zwracamy tylko obietnicę z funkcji, które planujesz zastosowanie czekają na
Reasumując:.
async
jest potrzebny tylko wtedy, gdy planujesz używać await
wewnątrz funkcji. Twoja funkcja prawdopodobnie nie wymaga nawet słowa kluczowego async
.
- Zwrócona obietnica jest wymagana tylko wtedy, gdy osoba dzwoniąca chce uzyskać dostęp do odpowiedzi asynchronicznej za pośrednictwem tradycyjnej wersji
f().then()
lub przez let x = await f()
.
- Dzwoniący może
await
funkcja, która nie jest oznaczona jako async
. await
otrzyma wartość zwracaną z funkcji, a jeśli wartość zwracana nie jest obietnicą, zawinie ją w rozwiązanej obietnicy. Jeśli jest to obietnica, będzie czekać na rozwiązanie.
FYI, to bardzo dobry, krótki i słodki review of async/await i jak one wchodzą w interakcje z obietnicami.
'async' nie jest ES6, jest to ES7 – smnbbrv
Co to jest" res "? Btw, jeśli nie ma żadnych "oczekujących" - w ogóle nie potrzebujesz 'async'. – zerkms
@zerkms Prawdopodobnie ekspresowy obiekt odpowiedzi: –