【发布时间】:2018-05-28 03:01:47
【问题描述】:
当用户请求重置密码时,我正在尝试发送短信。我想等待消息发送以提醒用户它是否成功。我目前正在尝试这样做:
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 在它返回之前返回。我已尝试将其设为异步方法并在 sns.publish 上添加等待,但该函数仍会在 send 设置为 true 之前返回。
我知道消息发送没有错误,因为我正在接收它们并且没有打印控制台日志。
【问题讨论】:
-
与 Javascript 中的其他异步事物一样,您必须向 sendMessage 提供一个可以调用成功或错误的回调函数,或者返回一个在成功或错误时解析/拒绝的 Promise。
标签: javascript node.js async-await amazon-sns aws-sdk-js