Почему Microsoft Graph возвращает сквозной поток, который никогда не генерирует событие «конец»? - PullRequest
0 голосов
/ 03 марта 2020

Мы пытаемся загрузить файл из OneDrive в локальный буфер, используя библиотеку microsoft-graph-client. Когда вызывается эта функция, поток passThrough, возвращаемый клиентом, генерирует очень маленькую горстку событий данных, и затем процесс существует, даже не выполняя обещание или не вызывая ошибку. Мы использовали этот же подход с другими интеграциями, которые возвращают потоки без проблем, кажется, что только поток Microsoft Graph прекращает генерировать события.

Мы пробовали on('readable') с теми же результатами и другими подобными подходами.

Есть ли что-то в природе сквозного прохода, которое делает этот подход неосуществимым?

  downloadItemContent (itemId) {
    const uri = `/me/drive/items/${itemId}/content`
    Logger.info(`Downloading OneDrive file at URI: ${uri}`)

    return this.msGraphClient
      .api(uri)
      .responseType(MicrosoftGraph.ResponseType.STREAM)
      .get()
      .then((result) => {
        return new Promise((resolve, reject) => {
          const chunks = []

          result.on('data', function (d) {
            chunks.push(d)
          })
          result.on('end', function () {
            return resolve(Buffer.concat(chunks))
          })
          result.on('error', function (err) {
            return reject(err)
          })
        })
      })
      .catch((err) => {
        Logger.error('Unable to download content from OneDrive', { status: err.code, error: err })
        return Promise.reject(err)
      })
  }
}
...