ReferenceError: lösen ist, wird nicht definiert
Habe ich eine Funktion aufrufen, die google speech api. Sieht alles gut ist, aber ich kann nicht finden, warum sein gibt mir den Fehler. Ich bin Anfänger mit Knoten und verspricht so nicht sicher, warum dieser Fehler erscheint.
ReferenceError: lösen ist, wird nicht definiert index.js:57
Das problem ist in diesem Teil des Codes:
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]));
})
Wo die Verheißung
Betrieb.Versprechen() (Zeile 57)
nicht gelöst werden kann. Will es beheben
das Versprechen, aber es sieht aus wie es nicht finden können, die lösen-Funktion.
Die google-api funktioniert wie folgt:
- Als erstes macht man einen api-Aufruf zum hochladen Ihrer Daten und starten Sie den Vorgang.
- Dies gibt Ihnen wieder eine operation name.
- Dieser name sollte verwendet werden, anschließend erhalten Sie das Ergebnis, wenn das Ergebnis fertig ist (dauert nur max 30 sec)
Habe ich das Gefühl, alle seine arbeiten, der Anruf, die Antwort kommt zurück. Der code wartet und dann möchte es zu beheben, aber es kann nicht...
Mein code ist wie folgt (eine cloud-Funktion)
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]
, und das Versprechen erstellt .dann wird aufgelöst, dass Wert.btw:
.catch(err => { return Promise.reject(err); });
ist völlig sinnlos. Löschen Sie diese Zeilen.
InformationsquelleAutor Koen | 2017-10-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hast du nicht angerufen
resolve()
innerhalb einer.then()
handler. Es gibt keine solche Funktion dort definiert. Wenn Sie einstellen möchten, mit der aufgelösten Wert das Versprechen aus, innerhalb einer.then()
handler, können Sie nur zurück, dass Wert.Ändern:
:
FYI, die
resolve()
sind Sie wahrscheinlich denken, ist ein argument, um das neue Versprechen Testamentsvollstrecker callback:- Und dies ist der Kontext, in dem Sie es benutzen würden.
Ich weiß nicht, dass Google-API. Wenn
bucket.file(...).save(...)
gibt ein Versprechen, dann können Sie einfach schicken Sie es innerhalb einer.then()
handler. Wenn nicht, müssen Sie promisify es zuerst.Danke! Ich habe gerade es in der return-und alles funktioniert wunderbar jetzt! Dank
InformationsquelleAutor jfriend00