ReferenceError: résoudre n'est pas défini
J'ai une fonction à appeler le google speech api. Regarde le tout est bon, mais je ne trouve pas pourquoi sa me donne l'erreur. Je suis débutant avec nœud et promet donc je ne sais pas pourquoi cette erreur apparaît.
ReferenceError: résoudre n'est pas défini au niveau de l'index.js:57
Le problème, c'est cette partie du code:
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]));
})
Où la promesse
opération.promesse() (ligne 57)
ne peut pas être résolu. Il veut résoudre
la promesse, mais on dirait qu'il ne trouve pas le résoudre fonction.
L'api google fonctionne comme ceci:
- Tout d'abord vous faire un appel api pour télécharger vos données et démarrer le processus.
- Cela vous donne, en retour, un nom de l'opération.
- Ce nom doit être utilisé par la suite pour obtenir le résultat lorsque le résultat est prêt (maximum 30 secondes)
J'ai le sentiment de sa tous les de travail, l'appel est fait, la réponse est de retour. Le code attend et puis, il cherche à résoudre, mais il ne le peut pas...
Mon code est comme ça (c'est un nuage de fonction)
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);
});
});
return responses[0]
, et la promesse créé par .puis se résoudre à cette valeur.btw, ce:
.catch(err => { return Promise.reject(err); });
est complètement inutile. Il suffit de supprimer ces lignes.
OriginalL'auteur Koen | 2017-10-09
Vous devez vous connecter pour publier un commentaire.
Vous n'appelez pas
resolve()
de l'intérieur d'une.then()
gestionnaire. Il n'y a pas une telle fonction qui y sont définies. Si vous souhaitez définir la valeur résolue de la promesse de l'intérieur d'une.then()
gestionnaire, vous pouvez simplement retourner cette valeur.Changer cela:
:
Pour info, le
resolve()
vous êtes probablement penser est un argument pour la nouvelle Promesse exécuteur de rappel:Et, c'est le contexte dans lequel vous l'utilisez.
Je ne sais pas qui de l'API Google. Si
bucket.file(...).save(...)
retourne une promesse, alors vous pouvez simplement retourner dans un.then()
gestionnaire. Si non, vous devez promisify en premier.Merci! J'ai juste ajouté dans le retour et tout fonctionne à merveille maintenant! Merci
OriginalL'auteur jfriend00