Преобразуйте google.protobuf.Timestamp в формат ISO в Fabric 1.4 в NodeJS. - PullRequest
1 голос
/ 21 октября 2019

Я использую цепной код Hyperledger Fabric 1.4 и пытаюсь получить историю ключа с помощью метода заглушки getHistoryForKey. Я перебираю каждую запись и хочу преобразовать их для стандартизации во всех моих функциях цепного кода.

Теперь я могу обрабатывать все ключи в итераторе, кроме метки времени, равной google.protobuf.Timestamp. Любые мои попытки не могут преобразовать его в строку даты и времени ISO.

Код

// Entry method to retrieve the full history of any asset
async (stub, args) => {
  const idToSearch = args.id
  const historyIterator = await stub.getHistoryForKey(idToSearch)
  let historyData = []
  await iterate(historyData, historyIterator)
  if (historyData.length === 0) throw errors.ASSET_NOT_FOUND(idToSearch)
  return historyData
}

// I use node v8 and thus cannopt use for await to iterator and must write recursive helper func
const iterate = async (historyData, historyIterator) => {
    const element = await historyIterator.next()
    if (!element) return historyIterator.close()
    const {value} = element
    if (!value) return historyIterator.close()

    historyData.push({
        value: value.value.toString('utf8'),
        isDeleted: value.is_delete,
        txId: value.tx_id,
        timestamp: value.timestamp // <-- WANT TO CONVERT TO ISO DATE TIME STRING
    })
    await iterate(historyData, historyIterator)
}

Мои подходы

1. toISOString ()

Относительно документации протобуфа метки времени написано " В JavaScript можно преобразовать объект Date в этот формат, используя стандартную toISOString () ". Это не работает, так как я получаю "toISOString не является функцией".

2. new Date ()

Далее я попытался запустить new Date(protobufTimestamp), что привело к "Invalid Date".

3. Используя секунды

, хотя, возможно, я смогу использовать секунды, которые находятся на двух клавишах (Object.keys(protobufTimestamp) => [seconds, nanos]) в метке времени, для создания даты. Но этот объект даты также говорит «Неверная дата». Это можно объяснить, поскольку я прочитал, что временная метка Protobuf охватывает диапазоны от 0 до 9999. Поэтому, возможно, преобразование завершится неудачей.

Вопрос

Может кто-нибудь объяснить, как преобразовать временную метку google protobufк метке времени ISO в Fabric 1.4 в NodeJS?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...