Как остановить Firebase Functions от выполнения локальных функций один раз для каждой облачной функции? - PullRequest
0 голосов
/ 24 ноября 2018

Итак, я использую API spotify для поиска.Локально я тестировал свой код, используя tsc и node;все работает, как и ожидалось.

Однако, когда я развертываю свой index.ts, журналы указывают на странное поведение.

В верхней части файла у меня есть следующее:

 //Load libraries
const functions      = require('firebase-functions');
const admin          = require('firebase-admin');
const firebase       = require("firebase");
const stripe         = require('stripe')(functions.config().stripe.token)
const SpotifyWebApi    = require('spotify-web-api-node');

//Initialize app
const APP = { 
  apiKey: "my-API-Key",  
  authDomain: "My domain auth",
  databaseURL: "my databse url",
  storageBucket: "my bucket",
  messagingSenderId: "my messenger ID"
}

//The Client Credential Flow for Spotify API
const spotifyApi = new SpotifyWebApi({
    clientId: 'My cliend ID',
    clientSecret: 'My-secret-Key'
});

// Retrieve an access token for Spotify.
spotifyApi.clientCredentialsGrant().then(function (data) {
    console.log('All data Spotify API: ' + data.body )
    console.log('The access token expires in ' + data.body['expires_in']);
    console.log('The access token is ' + data.body['access_token']);
    // Save the access token so that it's used in future calls
    spotifyApi.setAccessToken(data.body['access_token']);
}, function (err) {
    console.log('Something went wrong when retrieving an access token', err);
})

firebase.initializeApp(APP);
admin.initializeApp(APP)

Проблема в том, что в журналах указывается, что функция токена доступа спойтинга запускается один раз для функции Firebase-Cloud в моем индексе.JS файл.Я получаю более дюжины токенов, каждый из которых отображается в журнале как вызванный из одной из моих функций в облачной базе firebase.

Как сказать Firebase Functions запускать этот код один раз и только один раз, когда я загружаю весь свой index.ts?И не запускайте его, когда я загружаю одну функцию;это тоже было бы полезно.

Спасибо.

1 Ответ

0 голосов
/ 25 ноября 2018

Код верхнего уровня для вашего index.js запускается в каждом контейнере, который создается в Cloud Functions, чтобы обеспечить правильную инициализацию контейнера для запуска ваших функций.Поскольку облачные функции могут создавать экземпляры нескольких контейнеров, код может выполняться несколько раз.

Невозможно контролировать количество контейнеров, которые создаются облачными функциями.Если вы не хотите, чтобы код запускался в каждом контейнере, не делайте его кодом верхнего уровня в вашем index.js.

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

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