2017-12-14 14 views
2

ユーザーがパスワードのリセットを要求したときにテキストメッセージを送信しようとしています。成功したかどうかを知らせるメッセージが送信されるのを待っています。私は現在、次のようにそれを行うにしようとしています:私の他のクラスAWSSNSClientでAWS SNSパブリッシュコールバックが呼び出しメソッドに値を返すのを待ちます。

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); 
    *************************************************************************** 
} 

、私は以下の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; 
} 

を私はsns.publishのためのsendMessage待機を作成する方法を見つけ出すことはできません自分自身を返す前に戻る。私はそれを非同期メソッドにして、sns.publishにawaitを追加しようとしましたが、send関数がtrueになる前に関数はまだ戻ります。

私はメッセージを受信して​​いて、コンソールログは印刷されていないので、エラーなしでメッセージが送信されていることを知っています。

+2

ようcallbackを供給することができ、この

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

のようなあなたのsendMessgeを修正し、あなたはどれを呼び出すことができますすることができますのsendMessageにコールバック関数を提供しなければならないのいずれか成功した場合やエラーが発生した場合にそれを解決する/拒否する約束を返します。 –

答えて

2

単純にコールバックを使用できます。その後、自分のメインファイルであなたはJavascriptで他の非同期のものと同じように、この

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); 
    }); 
} 
+0

sendMessage関数では、 "let sent = false;"という行が表示されます。もはや正しい必要はありませんか? – havak5

+0

はい、使用していない変数は削除できます。 –

+0

答えを編集し、 'sent'変数を削除しました。 –

関連する問題