【问题标题】:Get and return value outside function - Nodejs获取和返回函数外的值 - Nodejs
【发布时间】:2022-01-09 18:10:50
【问题描述】:

我正在研究一些具有值回调的方法,我需要返回和响应,但在回调函数之外值为 null 我该如何解决?

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; // <----- VALUE I WANT TO RETURN OUTSIDE
      }
    });
  } catch (e) {
    return response({error: e}, 500);
  }
  return response({data: channel},200); // <---- but this channel is null
}

【问题讨论】:

  • 不是 createChannel 异步方法吗?可能你忘了 await

标签: node.js return-value


【解决方案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)=>{
    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)// <----- VALUE I WANT TO RETURN OUTSIDE
      }
    });
    })

  } catch (e) {
    return response({error: e}, 500);
  }
  return response({data: channel},200); // <---- but this channel is null
}

【讨论】:

  • 谢谢!工作中。我只用“return resolve(...)”编辑过
  • @RogerAI 我不明白你为什么需要return
猜你喜欢
  • 2011-11-13
  • 2019-02-25
  • 2016-01-03
  • 1970-01-01
  • 2016-08-28
  • 2017-08-08
  • 2018-11-17
  • 2020-03-04
  • 2019-10-17
相关资源
最近更新 更多