Получение и возврат значения вне функции — Nodejs

#node.js #return-value

#node.js #возвращаемое значение

Вопрос:

Я работаю над некоторым методом, у которого есть обратный вызов со значением, которое мне нужно вернуть и ответить, но значение равно нулю вне функции обратного вызова, Как я могу решить?

 async function createChannel(req) {  let user_id = req.query.user_id;  let chat_name = req.query.chat_name;  var chimesdkmessaging = new AWS.ChimeSDKMessaging({region: region});   var channel = null;   try {  let dateNow = new Date();  const params = {  Name: chat_name,  AppInstanceArn: config.aws_chime_app_istance,  ClientRequestToken: dateNow.getHours().toString()   dateNow.getMinutes().toString(),  ChimeBearer: await AppInstanceUserArn(user_id),  AppInstanceUserArn of the user making the API call.  Mode: 'RESTRICTED',  Privacy: 'PRIVATE'  };   chimesdkmessaging.createChannel(params, function (err, data) {  if (err) {  console.log(err, err.stack);  } // an error occurred  else {  console.log(data); // successful response  console.log('Assegno il canale: '   data.ChannelArn);  channel = data.ChannelArn; // lt;----- VALUE I WANT TO RETURN OUTSIDE  }  });  } catch (e) {  return response({error: e}, 500);  }  return response({data: channel},200); // lt;---- but this channel is null }  

Комментарии:

1. не является ли метод CreateChannel асинхронным? наверное, вы забыли об этом

Ответ №1:

заверните с обещанием

 let user_id = req.query.user_id;  let chat_name = req.query.chat_name;  var chimesdkmessaging = new AWS.ChimeSDKMessaging({region: region});   let channel = null;   try {  let dateNow = new Date();  const params = {  Name: chat_name,  AppInstanceArn: config.aws_chime_app_istance,  ClientRequestToken: dateNow.getHours().toString()   dateNow.getMinutes().toString(),  ChimeBearer: await AppInstanceUserArn(user_id),  AppInstanceUserArn of the user making the API call.  Mode: 'RESTRICTED',  Privacy: 'PRIVATE'  };   channel = await new Promise((resolve,reject)=gt;{  chimesdkmessaging.createChannel(params, function (err, data) {  if (err) {  console.log(err, err.stack);  reject(err)  } // an error occurred  else {  console.log(data); // successful response  console.log('Assegno il canale: '   data.ChannelArn);  resolve(data.ChannelArn)// lt;----- VALUE I WANT TO RETURN OUTSIDE  }  });  })   } catch (e) {  return response({error: e}, 500);  }  return response({data: channel},200); // lt;---- but this channel is null }  

Комментарии:

1. Спасибо! работает. Я редактировал только с помощью «return resolve (…)».

2. @RogerAI я не понимаю, зачем тебе нужна return