等待AWS SNS发布callback函数将值返回给调用方法

我试图发送一个文本消息,当用户请求重置他们的密码。 我想等待消息发送,以提醒用户是否成功。 我目前正在尝试做如下:

async function sendResetPasswordTextMessage(req, res) { let result = {}; let phoneNumber = req.body.phoneNumber; if (phoneNumber === undefined) { return sendInvalidParametersMessage(res); } phoneNumber = phoneNumber.toString(); const userProfile = await models.UserProfile.findOne({ where: { phoneNumber: phoneNumber } }); ************************** RELEVANT CODE TO ISSUE ************************* if (userProfile) { const message = "Your username is:\n" + userProfile.username; const sent = await AWSSNSClient.sendMessage(message, phoneNumber); if (!sent) { result.error = setTitleAndMessage("Error", "An error occurred"); } else { result.success = setTitleAndMessage("Success", "Message sent"); } } return res.send(result); *************************************************************************** } 

在我的其他类AWSSNSClient中,我有以下sendMessage函数:

 function sendMessage(message, phoneNumber) { const params = { Message: message, MessageStructure: "string", PhoneNumber: "+1" + phoneNumber }; let sent = false; sns.publish(params, function(err, data) { if (err) { console.log(err, err.stack); // an error occurred } else { sent = true; } }); return sent; } 

我不知道如何使sendMessage等待sns.publish返回自己之前返回。 我已经尝试使它成为一个asynchronous方法,并在sns.publish上添加await,但函数仍然返回之前发送设置为true。

我知道,邮件没有错误发送,因为我收到他们,并没有控制台日志打印。

你可以简单地使用callback。 像这样修改你的sendMessge

 function sendMessage(message, phoneNumber, cb) { const params = { Message: message, MessageStructure: "string", PhoneNumber: "+1" + phoneNumber }; sns.publish(params, cb); } 

那么你的主文件就可以像这样提供callback

 if (userProfile) { const message = "Your username is:\n" + userProfile.username; AWSSNSClient.sendMessage(message, phoneNumber, (err, data) => { if (err) { result.error = setTitleAndMessage("Error", "An error occurred"); } else { result.success = setTitleAndMessage("Success", "Message sent"); } res.send(result); }); }