関数実行キューのJavaScript関数

2020-08-02 javascript react-native

私はJavaScriptの初心者です。私のreactネイティブプロジェクトでは、react-native-get-sms-androidを使用します。最初の関数は機能します。 2つの機能を同期する必要があります。それ、どうやったら出来るの?

const Sent_SMS = (SMS_Rows) => {
var SetSent = [];
var last = false;
for (let i = 0; i < SMS_Rows.length; i++) {
    
    if(i==SMS_Rows.length-1)
       last=true;

    SmsAndroid.autoSend(
        JSON.stringify(SMS_Rows[i]['phone']),
        SMS_Rows[i]['message'],

        (fail) => {
            //console.log('Failed with this error: ' + fail);
        },
        (success) => {
            //console.log('SMS sent successfully');
            SetSent.push(SMS_Rows[i]['id']);
            if (last==true) {
                console.log(SetSent);
            }
        },

    );
}

}

私の出力はtrue、true、true、trueです

Answers

forループ内のロジックを別の関数に移動します。

function sendSMS(SMS_Rows, i){
  SmsAndroid.autoSend(
        JSON.stringify(SMS_Rows[i]['phone']),
        SMS_Rows[i]['message'],

        (fail) => {
            //console.log('Failed with this error: ' + fail);
        },
        (success) => {
            //console.log('SMS sent successfully');
            SetSent.push(SMS_Rows[i]['id']);
            if (i == SMS_Rows.length - 1) {
                console.log(SetSent);
            }
        },

    );
}
for (let i = 0; i < arr.length; i++) {
  sendSMS(SMS_Rows, i);
}

テスト済み。最後のSMSメッセージの後にconsole.logが起動されます。機能するかどうかをお知らせください。

Related