Отметка времени сервера с использованием FireBase - PullRequest
0 голосов
/ 16 января 2020

Я работаю над процессом рецензирования / комментирования и хотел бы иметь возможность сохранять каждый рецензию / комментарий, предоставленный пользователем, для другого в firebase, при этом каждый рецензия / оценка, представленные в то же время, находятся под одной и той же отметкой времени. Сначала я использовал функцию JS new Date (). GetTime (), и это прекрасно работает, но чтобы пользователи не могли изменить значение (ie, изменив дату на своем компьютере), я бы хотел вместо этого использовать временную метку firebase.

Теперь я хочу, чтобы конечным продуктом была карта:

[chatStartTime] : {
   review : stars,
   time : chatStartTime
 }

, которую я затем включаю в документ firebase с помощьюaction.set (). Теперь проблема в ChatStartTime, которая должна представлять эту метку времени. У меня есть код:

var chatStartTime = firebase.firestore.FieldValue.serverTimestamp();

Кроме того, я также надеюсь получить:

var chatStartTimeDate = chatStartTime.toDate();

Однако chatStartTimeDate приводит к ошибке - я понимаю, что это потому, что chatStartTime по существу, «недействительным», пока он не будет добавлен в документ; Есть ли способ обойти это и использовать эту функцию? Кроме того, если я просто использую chatStartTime для обоих экземпляров, я получаю карту в базе данных в виде:

[object Object] 
  review : 4.5
  time :
        .sv: "timestamp"

Где .sv - строковый тип. Как я могу решить эту проблему? Я бы хотел, чтобы конечный результат выглядел примерно так (например)

 1579194722735
  review : 4.5
  time : 1579194722735

1 Ответ

0 голосов
/ 16 января 2020

Значение FieldValue.serverTimestamp() записывается на сервер во время записи. Так что вы не можете получить его до того, как произойдет запись Однако вы можете получить writeTime из ответа. Это должно дать вам то, что вы после. Кроме того, вы можете прочитать документ обратно после того, как напишите его, чтобы получить метку времени (но это кажется ненужным).

myCollection
    .doc('foo')
    .create({ timestamp: FirebaseFirestore.FieldValue.serverTimestamp() })
    .then(result => {
      const serverTime: Date = result.writeTime.toDate();
    });
...