Поэтому я последовал примеру Google с шаблоном отправителя событий, но немного изменил его, чтобы удовлетворить мои потребности. Однако что-то потеряно, и моя функция transcribe возвращает undefined.
Пожалуйста, помогите мне, как мне вернуть результат из operation.on ('complete' ...)?
вот как функция транскрибирования вызова:
const { transcribe } = require('./helpers/')
const tr = await transcribe(gcsuri)
и это реализация транскрибирования:
exports.transcribe = async (gcsuri) => {
const reducerforSingleAlternative = (obj, item, index, array) => {
item.alternatives[0].words.map(word => obj.words.push(word))
obj.confidence += item.alternatives[0].confidence
obj.transcript += item.alternatives[0].transcript
if (index === (array.length - 1)) {
obj.confidence = obj.confidence / array.length
}
return obj
}
process.env.GOOGLE_APPLICATION_CREDENTIALS = process.env.SPEECH_KEY
const speech = require('@google-cloud/speech').v1p1beta1
const client = new speech.SpeechClient()
const audio = {
uri: gcsuri
}
const request = {
audio: audio,
config: { encoding: 'OGG_OPUS',
sampleRateHertz: 24000,
languageCode: 'ru',
enableSpeakerDiarization: true,
enableWordConfidence: true,
maxAlternatives: 1,
enableAutomaticPunctuation: true,
enableWordTimeOffsets: true,
}
}
const [operation, initialApiResponse] = await client.longRunningRecognize(request)
operation.on('progress', (metadata, apiResponse) => {
console.log('metadata', metadata, apiResponse)
})
operation.on('complete', (result, metadata, finalApiResponse) => {
console.log("complete!")
const res = result.results.reduce(reducerforSingleAlternative, {words:[], confidence:0, transcript:""})
return res
})
operation.on('error', err => {
throw(err)
})
}
Я пытался также
return await new Promise((resolve, reject) => {
operation.on...
...
}
Но, как ни странно, этот код порождал две идентичные операции по одному запросу, поэтому я догадался, что я что-то делал не так