У меня есть этот код, мне нужна вторая функция handleRequest
для запуска первой. затем вторая функция после позже
код
const db = admin.firestore();
const docRef = db.collection("user").doc(`${UID}`);
let result;
function update() {
db.runTransaction(t => {
return t.get(docRef).then(doc => {
const newValue = doc.data().Funds + result;
t.update(docRef, { Funds: newValue });
return true;
});
})
.then(success => {
console.log("successfully updated");
})
.catch(error => {
console.log(error);
});
}
//the below function runs first and returns a value (data) that is
//needed by the function up top (update)
handleRequest()
.then(data => {
console.log(data);
result = parseFloat(data);
update(); //the update function
return true;
})
.catch(error => {
console.log(error);
});
Проблема в том, что когда я добавляю функцию Update
в функцию handleRequest
(которая является асинхронной), как в коде, handleRequest
завершается ошибкой.
4:36:22.241 PM onOrderCreate Function execution took 869 ms, finished
with status: 'ok'
4:36:21.991 PM onOrderCreate kPlpJCGkJ6XdsJlkxgobM5gHGUd2
//the console.log up top of UID. There is no log of the data from the
//handleRequest function
4:36:21.377 PM onOrderCreate Function execution started
После удаления функции update
другая функция handleRequest
завершается успешно. Что мне не хватает, что добавление функции внутри функции .then
приводит к сбою?
Я также попробовал обходной путь, инициализируя переменную result
с результатом функции handleRequest
, такой как
function update() {
db.runTransaction(t => {
return t.get(docRef).then(doc => {
const newValue = doc.data().Funds + result=handleRequest()
.then(data => {
console.log(data);
result = parseFloat(data);
update(); //the update function
return true;
})
.catch(error => {
console.log(error);
});
t.update(docRef, { Funds: newValue });
return true;
});
})
.then(success => {
console.log("successfully updated");
})
.catch(error => {
console.log(error);
});
}
Это просто помещает объект обещания в мою базу данных, Firestore.
Функция handlerequest
- это вызов Paypal для обработки orderID для получения значения заказа (это хорошо работает). Как только это будет сделано, он регистрирует возвращенные данные. Возвращенные данные - это данные, которые я пытаюсь сохранить в Firestore как транзакция
Как мне структурировать этот код, чтобы правильно сохранить в Firestore