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); });
而且,这是您将使用它的上下文。