Issue
Как добавить вспомогательный метод async
в файл Cloud Functions ' index.js ?Функция async
требуется для использования await
при преобразовании fs.writefile
в Promise , как описано в этом сообщении StackOverflow: fs.writeFile в обещании, асинхронно-синхронный материал .Однако lint не одобряет добавление дополнительного метода вне функций exports
к файлу index.js .
Ошибка
Строка 84 относится к вспомогательной функции async function writeFile
.
Users / adamhurwitz / coinverse / coinverse-cloud-functions / functions / index.js 84: 7 Ошибка синтаксического анализа:Неожиданная функция токена
problem 1 проблема (1 ошибка, 0 предупреждений)
npm ERR!код ELIFECYCLE
npm ERR!errno 1
npm ERR!functions @ lint: eslint .
npm ERR!Статус выхода 1
npm ERR!
npm ERR!Ошибка в скрипте functions @ lint.
npm ERR!Это, вероятно, не проблема с npm.Скорее всего, выше выводится логирование.
npm ERR!Полный журнал этого прогона можно найти в:
npm ERR!/Users/adamhurwitz/.npm/_logs/2018-12-12T01_47_50_684Z-debug.log
Ошибка: ошибка предустановки функций: команда завершилась с ненулевым кодом выхода1
Настройка
index.js
const path = require('path');
const os = require('os');
const fs = require('fs');
const fsPromises = require('fs').promises;
const util = require('util');
const admin = require('firebase-admin');
const functions = require('firebase-functions');
const {Storage} = require('@google-cloud/storage');
const textToSpeech = require('@google-cloud/text-to-speech');
const storage = new Storage({
projectId: 'project-id',
});
const client = new textToSpeech.TextToSpeechClient();
admin.initializeApp();
exports.getAudiocast = functions.https.onCall((data, context) => {
const bucket = storage.bucket('gs://[bucket-name].appspot.com');
var fileName;
var tempFile;
var filePath;
return client.synthesizeSpeech({
input: {text: data.text },
voice: {languageCode: 'en-US', ssmlGender: 'NEUTRAL'},
audioConfig: {audioEncoding: 'MP3'},
})
.then(responses => {
var response = responses[0];
fileName = data.id + '.mp3'
tempFile = path.join(os.tmpdir(), fileName);
return writeFile(tempFile, response.audioContent)
})
.catch(err => {
console.error("Synthesize Speech Error: " + err);
})
.then(() => {
filePath = "filePath/" + fileName;
return bucket.upload(tempFile, { destination: filePath })
})
.catch(err => {
console.error("Write Temporary Audio File Error: " + err);
})
.then(() => {
return { filePath: filePath }
})
.catch(err => {
console.error('Upload Audio to GCS ERROR: ' + err);
});
});
Вспомогательный метод:
async function writeFile(tempFile, audioContent) {
await fs.writeFile(tempFile, audioContent, 'binary');
}
Попытка решения
Включение Node.js 8 как рекомендовано в посте Облачные функции для Firebase Асинхронный стиль ожидания .
Установить версию Node.js "engines": {"node": "8"}
return await fs.writeFile(tempFile, audioContent, 'binary');
Lint не нравится это решение.