Estoy usando la API de almacenamiento de Google para guardar un archivo en el depósito de gcp en una función asíncrona. Quiero esperar hasta que obtenga un error o éxito en la devolución de llamada, solo entonces quiero continuar con otras líneas de código pero obtengo LastMessage antes del éxito o error.
https://googleapis.dev/nodejs/storage/latest/File.html#save
await file.save(jsonData.trim(), {resumable : false}, function(error) { if (error) { console.log('error'); } else { console.log('success'); } }) console.log( "LastMessage: Error or Success is received, only then log this message")Tu .save() no está devolviendo la promesa. Más bien está dando una devolución de llamada. Puede crear un método de promesa tradicional para obtener lo que desea lograr. Aquí está el fragmento de código para eso:
const saveFile = (jsonData) => { return new Promise((resolve, reject) => { file.save(jsonData.trim(), { resumable: false }, function (error) { if (error) { console.log('error'); reject() } else { console.log('sucess'); resolve() } }) }) } await saveFile() console.log("LastMessage: Error or Success is received, only then log this message")Hay un ejemplo en el documento.
https://googleapis.dev/nodejs/storage/latest/File.html#save-examples
const {Storage} = require('@google-cloud/storage'); const storage = new Storage(); const myBucket = storage.bucket('my-bucket'); const file = myBucket.file('my-file'); const contents = 'This is the contents of the file.'; file.save(contents, function(err) { if (!err) { // File written successfully. } }); //- // If the callback is omitted, we'll return a Promise. //- file.save(contents).then(function() {});No necesita usar await, para su ejemplo puede probar esto:
file.save(jsonData.trim(), {resumable : false}) .then(() => nextFunc()) .catch(() => nextFunc()) function nextFunc() { console.log( "LastMessage: Error or Success is received, only then log this message") }