Вместо этого вы можете сделать getList
функцию async
, без new Promise
или try
/ catch
:
module.exports.getList = async (uid, listType) => {
const returnValue = [];
if (listType.contains("a")) {
const block = await db.collection('alist').doc(uid).get();
returnValue.push(block);
}
if (listType.contains("b")) {
const like = await db.collection('blist').doc(uid).get();
returnValue.push(like);
}
if (listType.contains("c")) {
const match = await db.collection('clist').doc(uid).get();
returnValue.push(match);
}
return returnValue;
};
Вызов ее вернет Promise
, который отклоняется сошибка, если есть асинхронная ошибка, или она преобразуется в нужный массив.
Обратите внимание, что, если нет веской причины await
каждый вызов в последовательном режиме, вы можете использовать Promise.all
вместо этого, чтобы запросывыйдите параллельно и сделайте код намного более лаконичным в процессе:
module.exports.getList = (uid, listType) => Promise.all(
['alist', 'blist', 'clist']
.filter(name => listType.contains(name[0]))
.map(name => db.collection(name).doc(uid).get())
);