Транзакция.set (...) является синхронной? - PullRequest
0 голосов
/ 12 февраля 2019

Я работаю с транзакцией базы данных в моем проекте angular / firebase.У меня есть это:

const transactionResult = await db.runTransaction(async trans => {
            // Get references:
            const parentGroupRef = db.collection('Groups').doc(parentGroupID);
            const childGroupRef = db.collection('Groups').doc(childGroupID);

            // Get documents:
            const promiseArray: Promise<any>[] = [];
            promiseArray.push(trans.get(parentGroupRef));
            promiseArray.push(trans.get(childGroupRef));
            const promiseResults: any[] = await Promise.all(promiseArray);

            // Get the group documents of the promise results:
            const parentGroupDoc = promiseResults.filter(groupDoc => { return groupDoc.id === parentGroupID; })[0];
            const childGroupDoc = promiseResults.filter(groupDoc => { return groupDoc.id === childGroupID; })[0];

            // Get data:
            if (parentGroupDoc && parentGroupDoc.exists && childGroupDoc && childGroupDoc.exists) {
                const parentGroupData = parentGroupDoc.data();
                const childGroupData = childGroupDoc.data();

                // Add child to parent and visa-versa:
                const results: any[] = [];
                if (parentGroupData.childGroupIDs.indexOf(childGroupID) === -1) {
                    parentGroupData.childGroupIDs.push(childGroupID);   
                    const addChildResult = trans.set(parentGroupRef, parentGroupData, {merge: true});
                    results.push(addChildResult);
                }

                if (childGroupData.parentGroupIDs.indexOf(parentGroupID) === -1) {
                    childGroupData.parentGroupIDs.push(parentGroupID);
                    const addParentResult = trans.set(childGroupRef, childGroupData, {merge: true});
                    results.push(addParentResult);
                }

                if (results.length > 0) {
                    return await Promise.all(results);
                } else {
                    return Promise.reject('No changes made');
                }
            } else {
                console.log('Could not find parent or child group, or both.');
                return Promise.reject('Could not find parent or child group, or both.');
            }
        });

Как видите, я жду обещаний, возвращенных из trans.get (…).Имеет ли смысл делать то же самое для trans.set (…)?Имеет смысл сделать это для trans.get (…), потому что trans.get (…) возвращает обещание.Но trans.set (…) возвращает объект транзакции.Поэтому мой вопрос: является ли trans.set (…) синхронным?

1 Ответ

0 голосов
/ 13 февраля 2019

Все API-интерфейсы Firebase, которые взаимодействуют с удаленной службой, являются асинхронными, включая API для транзакций.

Чтение: Почему API-интерфейсы Firebase являются асинхронными?

...