ユーザーがパスワードのリセットを要求したときに、テキスト メッセージを送信しようとしています。成功したかどうかをユーザーに警告するメッセージが送信されるのを待ちたいと思います。私は現在、次のようにしようとしています:
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 に await を追加しようとしましたが、関数は send が true に設定される前に戻ります。
メッセージを受信しており、コンソール ログが出力されていないため、メッセージがエラーなしで送信されていることがわかっています。