почему моя облачная функция продолжает работать, даже если она завершила задачу? - PullRequest
0 голосов
/ 11 сентября 2018

, поэтому я пытаюсь сделать миниатюру из изображения, которое было загружено в хранилище Firebase.функция может генерировать эскиз правильно.но из журнала функций, кажется, что функция все еще выполняется несколько раз, даже несмотря на то, что миниатюра была сгенерирована отлично.

, как вы можете видеть из журнала ниже, функция работает с 2:37 до 2:40 в течениеи снова.Мне нужно удалить функцию с терминала, чтобы остановить функцию.

enter image description here enter image description here

вот код, который я использую:

export const generateEventThumbnail = functions.storage.object().onFinalize(async (object) => {

      const fileBucket = object.bucket; // The Storage bucket that contains the file.
      const filePath = object.name; // File path in the bucket.
      const contentType = object.contentType; // File content type.
      const fileName = path.basename(filePath); // Get the file name.

      console.log(filePath)
      console.log(fileName)

      if (!contentType.startsWith('image/')) {
        console.log('This is not an image.');
        return null;
      }




      try {

        // [START thumbnailGeneration]
        // Download file from bucket.
        const bucket = gcs.bucket(fileBucket);
        const tempFilePath = path.join(os.tmpdir(), fileName);
        const metadata = {contentType: contentType};
        await bucket.file(filePath).download({destination: tempFilePath})
        console.log('Image downloaded locally to', tempFilePath)

        // Generate a thumbnail using ImageMagick.
        await spawn('convert', [tempFilePath, '-thumbnail', '100x100>', tempFilePath])
        console.log('Thumbnail created at', tempFilePath)

        // We add a 'thumb_' prefix to thumbnails file name. That's where we'll upload the thumbnail.
        const thumbFileName = `${fileName}`;
        const thumbFilePath = `eventThumbnail/${thumbFileName}`

        // Uploading the thumbnail.
        await bucket.upload(tempFilePath, {destination: thumbFilePath,metadata: metadata})

        // Once the thumbnail has been uploaded delete the local file to free up disk space.
        fs.unlinkSync(tempFilePath)
        // [END thumbnailGeneration]


        // then save the thumbnail path to the event data in firestore database

        return Promise.resolve(null)



      }
      catch (error) {
          console.log(error)
      }




    });

как остановить функцию после успешного создания эскиза?

1 Ответ

0 голосов
/ 11 сентября 2018

Вы пишете миниатюру обратно в хранилище:

const thumbFilePath = `eventThumbnail/${thumbFileName}`
await bucket.upload(tempFilePath, {destination: thumbFilePath,metadata: metadata})

Это снова запускает вашу функцию, но вы не проверяете правильно, нужно ли снова обрабатывать новый эскиз.

Это единственная проверка, которую вы проводите сейчас для досрочного прекращения:

if (!contentType.startsWith('image/')) {
    console.log('This is not an image.');
    return null;
}

Что, очевидно, не работает в вашем случае.Может быть, вам следует проверить путь к новым файлам, а не просматривать их тип содержимого.Возможно, пропуск файлов, записанных в eventThumbnail, подойдет для вашего случая.

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