2017-12-24 4 views
1

Ich schreibe eine Funktion, wo ich Firebase den Code bin nach aus dem Beispielcode in Github provided by Firebase Allerdings habe ich konsequent bin immer den Fehler Function returned undefined, expected Promise or value in meiner Firebase Funktionen protokollieren.Firebase: Funktion zurückgegeben undefiniert, erwartete Versprechen oder Wert

Ich habe so ziemlich meinen Code geändert, um genau das gleiche und doch keine Atempause zu sein. Hat jemand diesen Code ausprobiert? Ist es fehlerfrei? Warum erhalte ich den Fehler? Denselben Code ist auch in der Firebase guide

Beispielcode den Fehler produziert unter

exports.imageToJPG = functions.storage.object().onChange(event => { 
    const object = event.data; 
    const filePath = object.name; 
    const baseFileName = path.basename(filePath, path.extname(filePath)); 
    const fileDir = path.dirname(filePath); 
    const JPEGFilePath = path.normalize(path.format({dir: fileDir, name: baseFileName, ext: JPEG_EXTENSION})); 
    const tempLocalFile = path.join(os.tmpdir(), filePath); 
    const tempLocalDir = path.dirname(tempLocalFile); 
    const tempLocalJPEGFile = path.join(os.tmpdir(), JPEGFilePath); 

    // Exit if this is triggered on a file that is not an image. 
    if (!object.contentType.startsWith('image/')) { 
    console.log('This is not an image.'); 
    return; 
    } 

    // Exit if the image is already a JPEG. 
    if (object.contentType.startsWith('image/jpeg')) { 
    console.log('Already a JPEG.'); 
    return; 
    } 

    // Exit if this is a move or deletion event. 
    if (object.resourceState === 'not_exists') { 
    console.log('This is a deletion event.'); 
    return; 
    } 

    const bucket = gcs.bucket(object.bucket); 
    // Create the temp directory where the storage file will be downloaded. 
    return mkdirp(tempLocalDir).then(() => { 
    // Download file from bucket. 
    return bucket.file(filePath).download({destination: tempLocalFile}); 
    }).then(() => { 
    console.log('The file has been downloaded to', 
     tempLocalFile); 
    // Convert the image to JPEG using ImageMagick. 
    return spawn('convert', [tempLocalFile, tempLocalJPEGFile]); 


}).then(() => { 
    console.log('JPEG image created at', tempLocalJPEGFile); 
    // Uploading the JPEG image. 
    return bucket.upload(tempLocalJPEGFile, {destination: JPEGFilePath}); 
    }).then(() => { 
    console.log('JPEG image uploaded to Storage at', JPEGFilePath); 
    // Once the image has been converted delete the local files to free up disk space. 
    fs.unlinkSync(tempLocalJPEGFile); 
    fs.unlinkSync(tempLocalFile); 
    }); 
}); 

Alle Zeiger?

+0

"Fragen, die Debugging-Hilfe suchen (" Warum funktioniert dieser Code nicht? ") Müssen das gewünschte Verhalten, ein spezifisches Problem oder einen Fehler und den kürzesten Code enthalten, um es in der Frage selbst zu reproduzieren sind für andere Leser nicht nützlich. Siehe: So erstellen Sie ein [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve). " –

+0

Der Beispielcode und die Dokumentation wurden noch nicht aktualisiert, um eine kürzlich erfolgte Änderung im SDK widerzuspiegeln. Siehe diese Frage: https://Stackoverflow.com/q/47128440/4815718, und insbesondere Franks Kommentar dort. –

+0

@BobSnyder - danke Bob, dein Kommentar war sehr hilfreich. Ich habe es geschafft, die Antwort auf die Frage zu finden. Und du warst dran. Schätzen Sie den Zeiger –

Antwort

3

Es scheint, dass Firebase kürzlich ihr SDK aktualisiert hat, aufgrund dessen ihr Beispielcode und ihre Dokumentation wenig veraltet sind. Sie müssen return mit einem booleschen Wert haben, selbst wenn Sie gerade versuchen, die Funktion zu verlassen. Also muss es return true für jeden der return statements in dem Code oben sein, wo keine Zusage zurückgegeben wird.

Ich werde diese Frage löschen und beantworten, sobald Firebase den Beispielcode und die Dokumentation aktualisiert hat. Bis es dann für diejenigen da ist, die vielleicht noch über dieses Thema stolpern, ohne zu wissen warum.

Verwandte Themen