繁体   English   中英

谷歌语音转文本 API 示例代码将无法运行

[英]Google speech-to-text API sample code will not run

我一直在重新阅读说明(设置项目,使用我的服务帐户密钥将环境变量设置为 JSON 文件的文件路径,安装/初始化 gcloud 等)但我无法运行示例代码所有,我不知道为什么。 示例代码是:

// Imports the Google Cloud client library
const speech = require('@google-cloud/speech');

// Creates a client
const client = new speech.SpeechClient();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
const gcsUri = '.resources/audio.raw';
const encoding = 'LINEAR16';
const sampleRateHertz = 16000;
const languageCode = 'en-US';

const config = {
  encoding: encoding,
  sampleRateHertz: sampleRateHertz,
  languageCode: languageCode,
};

const audio = {
  uri: gcsUri,
};

const request = {
  config: config,
  audio: audio,
};

// Detects speech in the audio file. This creates a recognition job that you
// can wait for now, or get its result later.
const [operation] = await client.longRunningRecognize(request);
// Get a Promise representation of the final result of the job
const [response] = await operation.promise();
const transcription = response.results
  .map(result => result.alternatives[0].transcript)
  .join('\n');
console.log(`Transcription: ${transcription}`);

终端显示以下错误:

const [operation] = await client.longRunningRecognize(request);
                      ^^^^^^

SyntaxError: Unexpected identifier
    at createScript (vm.js:56:10)
    at Object.runInThisContext (vm.js:97:10)
    at Module._compile (module.js:542:28)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Module.runMain (module.js:604:10)
    at run (bootstrap_node.js:389:7)
    at startup (bootstrap_node.js:149:9)

我不明白为什么它是一个意外的标识符。 没有创建 const 客户端吗?

“await”用于异步 function,让我们将您的代码放入异步 function

// Imports the Google Cloud client library
const speech = require('@google-cloud/speech');

// Creates a client
const client = new speech.SpeechClient();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
const gcsUri = '.resources/audio.raw';
const encoding = 'LINEAR16';
const sampleRateHertz = 16000;
const languageCode = 'en-US';

const config = {
  encoding: encoding,
  sampleRateHertz: sampleRateHertz,
  languageCode: languageCode,
};

const audio = {
  uri: gcsUri,
};

const request = {
  config: config,
  audio: audio,
};
async function main () {
// Detects speech in the audio file. This creates a recognition job that you
// can wait for now, or get its result later.
const [operation] = await client.longRunningRecognize(request);
// Get a Promise representation of the final result of the job
const [response] = await operation.promise();
const transcription = response.results
  .map(result => result.alternatives[0].transcript)
  .join('\n');
console.log(`Transcription: ${transcription}`);
}
main();

await关键字只能在异步函数中使用。

您可以将部分代码包装在 promise function 中,然后调用 promise:

const detectSpeach = async () => {
  // Detects speech in the audio file. This creates a recognition job that you
  // can wait for now, or get its result later.
  const [operation] = await client.longRunningRecognize(request);
  // Get a Promise representation of the final result of the job
  const [response] = await operation.promise();
  const transcription = response.results
    .map(result => result.alternatives[0].transcript)
    .join('\n');
  console.log(`Transcription: ${transcription}`);
};

detectSpeach();

更多信息: https://javascript.info/async-await

const [operation] = await client.longRunningRecognize(request);
                  ^^^^^^
SyntaxError: Unexpected identifier

我不明白为什么它是一个意外的标识符。 没有创建const client吗?

答案是,是的, const client已初始化,但await在普通 JavaScript 脚本中不被视为关键字。 async function(或生成器函数)之外, await通常是一个有效的标识符,因此client后面的await序列不是有效的表达式,因为client是一个意外的标识符。

要将await用作运算符,它必须在async function 或生成器中编码。 在新代码中使用await作为标识符可能是不明智的。

背景:

  • ES5.1 没有await作为保留字或未来保留字,
  • ES6 (ECMAScript 2015) 在 ECMAScript 模块的上下文中引入了await作为未来的保留字。
  • ECMAScript 2019 包含await作为保留字,但提供它可以用作标识符,除非句法语法的目标 [symbol] 是Module

我对这种拼凑的混乱的理解是,通过修改 JavaScript 解析器来检测可能是什么语法错误( async async functionawait await identifierfor await... of )并在某些情况下进一步处理它们,而不是进一步处理它们所有,上下文。

写一个答案,因为我没有足够的声誉来发表评论。 您使用的是哪个节点版本? IIRC,从 7.6 版开始支持await / async

其他答案谈论将其放入async function 中,您也需要这样做,但我认为它为这种情况引发的错误将类似于“异步是保留关键字”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM