Google音声APIを使用してテキストをテキストに変換する簡単なWebアプリケーションを作成しようとしています。 Google Speech API認証などを正しく設定して、Googleのノードサンプルを管理するようにしました。私はこれをしようとすると、私が取得ExpressサーバでGoogle Speech APIを使用する
const express = require("express");
const fs = require("fs");
const app = express();
app.set("port", process.env.PORT || 3001);
function syncRecognize (filename, encoding, sampleRateHertz, languageCode) {
const Speech = require('@google-cloud/speech');
const speech = Speech();
const request = {
encoding: encoding,
sampleRateHertz: sampleRateHertz,
languageCode: languageCode
};
speech.recognize(filename, request)
.then((results) => {
const transcription = results[0];
return transcription;
})
.catch((err) => {
console.error('ERROR:', err);
});
}
app.get("/api/transcribe", (req, res) => {
syncRecognize(
'./audio.raw',
'LINEAR16',
16000,
'en-US'
).then(text => {res.json(text)})
.catch((err) => {
console.error('ERROR:', err);
});
})
:今、私は次のserver.jsと同じディレクトリに住んでいる「audio.raw」と呼ばれるローカルファイルに私自身のサーバーからそれを呼び出したいです次のエラー:
[0] TypeError: Cannot read property 'then' of undefined
[0] at /path/to/server.js:62:4 // the .then after syncRecognize(...)
...
どうすればいいですか? [OK]を
EDIT
ので、私はsyncRecognize機能が実際にいくつかの点で正しいconst transcription
を返すことを確認しました。問題は、なんらかの理由で。が返されるのを待たないということです。
私は ".then"演算子を使用するために、約束を返す必要があることを読んだ。私はこれを行う方法や、より良い選択肢があるかどうかについては正確にはわかりません。私はそれが本当に非同期についての私の知識の欠如の問題だと思います。
おかげで、最終的にもそれがで働かせましたコールバックが、私は(希望)これはよりエレガントだと思う:)。 jsonの解析などを行うために、複数の '.then(...)'を順番に呼び出すのは普通ですか? – anthnyprschka
私の意見では、async/awaitを使う方がよりエレガントです。プロミスをチェーン化することに何も問題はありません。それは、プロミスがプロミスを返すことができるという重要な概念の1つです。 –