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);
});
});
Vous êtes déjà dans une .puis de rappel. Juste 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