#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