2017-03-11 8 views
0

私は3つの関数を持っており、クリックするごとに1つずつ実行しようとしています。より良いそれを行うとJS関数のシーケンス約束の方法

キャッチされないTypeErrorのようなエラーを取得するために停止する方法:undefinedのプロパティthenを読み取ることができませんか?あなたは(すなわち、最終()を省略し、あなたの関数の各々からの約束(jQueryの中のDeferred)を返し、ハンドラではなく、その関数を呼び出した結果として、各.thenに関数を渡す必要があり

function msgRequest() { 
    $.post('/admin/notify/messages', {"_token": "{{ csrf_token() }}"}, function (messages) { 
    }) 
} 

function readAll() { 
     $.each(messages, function (index, message) { 
      $.post('/admin/notify/read', {notify_id : message.id,"_token": "{{ csrf_token() }}"} ,function (data) { 
      }); 
     }); 
} 

function getUnread() { 
    $.post('/admin/notify/unread', {"_token": "{{ csrf_token() }}"} ,function (unread) { 
     $('#unread').text(unread); 
    }); 
} 

$('#readall').click(function() { 
    msgRequest().then(readAll()).then(getUnread()) 
}); 
+0

非常に間違っています。 'msgRequest'が何も返さないので、あなたが得ているエラーがあります。 –

+0

あなたのコードには約束はありません。 – blackmiaool

+0

私はここに多くのことが間違っているが、私の目標を達成する方法を知っていますか?私は約束しているマニュアルやドキュメントを読んでいますが、それを手に入れることはできません:) – Alex

答えて

2

)。

function msgRequest() { 
    return $.post('/admin/notify/messages', { 
    "_token": "{{ csrf_token() }}" 
    }).promise() 
} 

function readAll(messages) { 
    return $.when.apply(null, $.map(messages, function(index, message) { 
    return $.post('/admin/notify/read', { 
     notify_id: message.id, 
     "_token": "{{ csrf_token() }}" 
    }).promise() 
    })); 
} 

function getUnread() { 
    return $.post('/admin/notify/unread', { 
    "_token": "{{ csrf_token() }}" 
    }, function(unread) { 
    $('#unread').text(unread); 
    return unread 
    }); 
} 

$('#readall').click(function() { 
    msgRequest().then(readAll).then(getUnread) 
}); 
+1

ありがとう、作品は素晴らしいですが、私はあなたの機能を変えます。 – Alex

+0

私は気にしない:)嬉しいことに、あなたが探していたものが見つかりました。 – gyre