У вас все неправильно.Это гораздо проще, чем вы думаете.
function getValues(collectionName, docName) {
return db.collection(collectionName).doc(docName).get().then(function (doc) {
if (doc.exists) return doc.data().text;
return Promise.reject("No such document");
}};
}
Если функция возвращает обещание (например, db.collection(...).doc(...).get()
), верните это обещание.Это «внешний» return
выше.
В обработчике обещаний (внутри обратного вызова .then()
) верните значение, указывающее на успех, или отклоненное обещание, чтобы указать на ошибку.Это «внутренний» return
выше.Вместо возврата отклоненного обещания вы также можете throw
выдать ошибку, если хотите.
Теперь у вас есть функция возврата обещания.Вы можете использовать его с .then()
и .catch()
:
getValues('configuration','helpMessage')
.then(function (text) { console.log(text); })
.catch(function (err) { console.log("ERROR:" err); });
или await
внутри функции async
в блоке try / catch, если вам это нравится больше:
async function doSomething() {
try {
let text = await getValues('configuration','helpMessage');
console.log(text);
} catch {
console.log("ERROR:" err);
}
}
Если вы хотите использовать async / await с функцией getValues()
, вы можете:
async function getValues(collectionName, docName) {
let doc = await db.collection(collectionName).doc(docName).get();
if (doc.exists) return doc.data().text;
throw new Error("No such document");
}