我有一個函數來調用google語音API。看起來一切都很好,但我無法找到爲什麼它給了我錯誤。我是節點和承諾的初學者,所以不知道爲什麼會出現此錯誤。ReferenceError:解析未定義
ReferenceError: resolve is not defined at 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() (line 57)
不能得到解決。它想要解決 的承諾,但它看起來像無法找到解析函數。
在谷歌API的工作原理是這樣的:
- 首先,你做一個API調用來上傳數據並開始處理。
- 這給你一個操作名稱。
- 這個名字應該被隨後用來得到結果,當結果準備好(只需要最多30秒)
我有一種感覺它的所有工作,在調用時,響應回來。代碼等待,然後它要解決,但它不能...
我的代碼是這樣的(它的雲功能)
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回調。只需'返回響應[0]',然後由.then創建的承諾將解析爲該值。 –
btw,這個:'.catch(err => {Promise.reject(err); });'完全沒有意義。只要刪除這些行。 – Thomas