Ciężko stąd wyczytać, co dokładnie ma robić kod, ale będę zgadywał. Zgaduję, że `_userIDs.items` jest tablicą (jeśli nie, to dość łatwo można poprawić moje przykłady)
Ogólnie dość mocno tu pomieszałeś rzeczy. Jeśli używasz Promise, to dość dziwne jest, że funkcja w środku też jest asynchroniczna. Dziwne też, że `request.get` używasz z await, ale też przekazujesz mu callbacka - zazwyczaj robi się albo jedno, albo drugie. Skoro mówisz, że funkcja się kończy zbyt szybko, to zgaduję, że `request.get` jest callbackowe.
W każdym razie, skoro chcesz zrobić kilka zapytań, a getData ma zwrócić Promise z tablicą z pobranymi danymi, dobrymi narzędziami będą prawdopodobnie .map() (żeby zamienić listę userów na zapytania) i Promise.all (które zaczeka aż wszystkie zapytania się zakończą i spakuje wynik w listę).
Zrobiłbym to tak (na sucho, więc możliwe że z błędami). Jeśli `request.get` zwraca promise:
function getData(_userIDs, _type, _pattern) {
const oauth = "...";
const url = "...";
const promises = _userIDs.items.map(item => {
const qs = {
user_id: item.user.id,
fields: _pattern
};
return request.get("...");
});
return Promise.all(promises);
}
A jeśli jest callbackowe, to jest trochę trudniej, bo trzeba opakować callback w promise. Można by też dla porządku wrzucić to w osobną funkcje, ale tu tego nie zrobiłem:
function getData(_userIDs, _type, _pattern) {
const oauth = "...";
const url = "...";
const promises = _userIDs.items.map(item => {
const qs = {
user_id: item.user.id,
fields: _pattern
};
return new Promise((resolve, reject) => {
request.get("...", (e, r, user) => {
if (e) {
reject("...");
return;
}
resolve(user);
});
});
});
return Promise.all(promises);
}