Я возвращаю объект Promise и не могу получить фактический объект - PullRequest
0 голосов
/ 11 февраля 2020

Код ниже возвращает объект Promise в форме Promise {object}. Я не могу получить его в реальном объекте

var msg_bo = new msgBO();
   var msg = JSON.parse(req.body.message);
   var cnf; 


   uploadFile()

   function upload(){
      return new Promise((resolve,reject)=>{
         cnf = msg_bo.uploadMessageAttachments(msg, req.file);
         resolve()
      })
   }

   async function uploadFile(){
         await upload()
         console.log('my response ',cnf)
         res.send({status:'success',message: {
            text:msg,filename:cnf
         }})

   }

Ответы [ 2 ]

0 голосов
/ 11 февраля 2020

это должно работать,

   var msg_bo = new msgBO();
   var msg = JSON.parse(req.body.message);
   var cnf; 


   uploadFile()

   function upload(){
      return new Promise((resolve,reject)=>{
         const cnf = msg_bo.uploadMessageAttachments(msg, req.file);
         resolve(cnf);
      })
   }

   async function uploadFile(){
         const cnf = await upload();
         console.log('my response ',cnf);
         res.send({status:'success',message: {
            text:msg,filename:cnf
         }})

   }
0 голосов
/ 11 февраля 2020

Измените свой код на это (при условии, что ваша функция верхнего уровня может await):

const msg_bo = new msgBO();
const msg = JSON.parse( req.body.message );

await uploadFile();

function upload(){
    return new Promise( ( resolve, reject ) => {
        const cnf = msg_bo.uploadMessageAttachments( msg, req.file );
        resolve( cnf );
    } );
}

async function uploadFile() {

    const cnf = await upload();
    console.log( 'my response ', cnf );
    res.send( {
        status: 'success',
        message: {
            text: msg,
            filename: cnf
        }
    } );
}

Вышесказанное можно упростить до этого:

const msg_bo = new msgBO();
const msg = JSON.parse( req.body.message );

const cnf = await upload();

console.log( 'my response ', cnf );

res.send( {
    status: 'success',
    message: {
        text: msg,
        filename: cnf
    }
} );

function upload(){
    return new Promise( ( resolve, reject ) => {
        const cnf = msg_bo.uploadMessageAttachments( msg, req.file );
        resolve( cnf );
    } );
}

.. Хотя вы фактически не используете какой-либо настоящий async API, вы можете делать все это синхронно (при условии, что uploadMessageAttachments не возвращает Promise<T>):

const msg_bo = new msgBO();
const msg = JSON.parse( req.body.message );

const cnf = msg_bo.uploadMessageAttachments( msg, req.file );

console.log( 'my response ', cnf );

res.send( {
    status: 'success',
    message: {
        text: msg,
        filename: cnf
    }
} );
...