ReferenceError:parsing没有定义

我有一个函数来调用谷歌的语音API。 看起来一切都很好,但我找不到为什么它给了我错误。 我初学者与节点和承诺,所以不知道为什么会出现此错误。

ReferenceError:parsing没有在index.js:57处定义

问题出在这部分代码中:

return speech .longRunningRecognize(responses) .then(function(results) { var operation = responses[0]; console.log("Operation: ", operation); return operation.promise(); }) .then(function(responses) { resolve(responses[0]); console.log("Result: ", JSON.stringify(responses[0])); }) 

凡诺言

operation.promise()(第57行)

无法解决。 它想要解决这个承诺,但是看起来它找不到解决的function。

谷歌的API是这样工作的:

  • 首先你要做一个API调用来上传你的数据并开始这个过程。
  • 这给你一个操作名称。
  • 结果准备就绪后,应该使用这个名字来获得结果(最多只需要30秒)

我有感觉,所有的工作,呼吁,反应回来。 代码等待,然后它想解决,但它不能…

我的代码是这样的(它是一个云function)

  exports.transcribeAudio = functions.storage.object().onChange(event => { const object = event.data; const filePath = object.name; const fileName = filePath.split("/").pop(); const fileBucket = object.bucket; const bucket = gcs.bucket(fileBucket); const tempFilePath = path.join(os.tmpdir(), fileName); // Exit if this is triggered on a file that is not an image. // Get the file name. //const fileName = path.basename(filePath); console.log(filePath + " name: " + fileName); // Exit if the image is already a thumbnail. if (!filePath.startsWith("ucl-flac-audio")) { console.log("Only flac-audio need to be converted"); return true; } // Exit if this is a move or deletion event. if (object.resourceState === "not_exists") { console.log("This is a deletion event."); return true; } return Promise.resolve() .then(() => { const audioFilename = "gs://" + fileBucket + "/" + filePath; console.log(audioFilename); const request = { config: { encoding: "FLAC", languageCode: "fr-FR" }, audio: { uri: audioFilename } }; return speech .longRunningRecognize(request) .then(function(responses) { var operation = responses[0]; console.log("Operation: ", operation); return operation.promise(); }) .then(function(responses) { resolve(responses[0]); console.log("Result: ", JSON.stringify(responses[0])); }) .catch(function(err) { console.error("Failed to get transcript.", err); // reject(err); }); }) .catch(err => { return Promise.reject(err); }); }); 

您不要在.then()处理程序中调用resolve() 。 这里没有定义这样的function。 如果您想在.then()处理程序中设置promise的已parsing值,则可以返回该值。

改变这个:

 .then(function(responses) { resolve(responses[0]); console.log("Result: ", JSON.stringify(responses[0])); }) 

对此:

 .then(function(responses) { console.log("Result: ", JSON.stringify(responses[0])); return responses[0]; }) 

仅供参考,您可能想到的resolve()是新的Promise执行程序callback的一个参数:

 let p = new Promise(function(resolve, reject) { resolve(10); }); 

而且,这是您将使用它的上下文。