Метод set()
является асинхронным и возвращает обещание, которое разрешается после завершения записи на сервер, как описано в документе здесь .
Из вашего комментария выше я понимаю, что вы хотите иметь статус «РАБОТАЕТ - до запуска функции и СДЕЛАНО после».
Так что вы должны сделать что-то вроде следующего:
var status = '';
var adaNameRef = firebase.database().ref('users/ada/name');
status = 'WORKING';
adaNameRef.set({ first: 'Ada', last: 'Lovelace' })
.then(function() {
status = 'DONE';
})
.catch(function(error) {
console.log('Synchronization failed');
});
Если вы хотите «записать несколько значений в базу данных одновременно», вам следует использовать метод update()
. См. здесь и здесь .
Подобно методу set()
, метод update()
является асинхронным и возвращает обещание, которое разрешается после завершения записи на сервер, поэтому вы будете использовать ту же логику для обновления значения состояния
ОБНОВЛЕНИЕ после вашего комментария
1. Отправить статус «РАБОТАЕТ» на FB 2. Установить реле в положение «ВКЛ» 3. Подождите x секунд 4. Отправить состояние «ГОТОВО» на FB 5. Установить реле в положение «ВЫКЛ»
Если я правильно понял, это должно сработать (но не проверено):
var adaNameRef = firebase.database().ref('users/ada/name');
adaNameRef.set({ status: 'WORKING'})
.then(function() {
// Set Relay to ON ... don't know exactly how you "set the relay"
sleep.sleep(x);
return adaNameRef.set({ status: 'DONE'})
})
.then(function() {
// Set Relay to OFF
})
.catch(function(error) {
console.log(error);
});