web-dev-qa-db-ja.com

.each()が完了した後の関数へのコールバック?

これが可能かどうか、またはそれをどうやって行うのかわからない。 $ .ajax応答で以下を使用していますが、これは完全に正常に機能しますが、ループの反復が終了した後、関数loadSlider();を呼び出す必要があります。

if (response.success)
{
    $.each( response.screenshots, function( index, value ) {
        //add the slide
        $( '#slider1' ).prepend( '<li data-id="'+value.screenshot_id+'"><img src="/showimage.php?show='+value.image_filename+'" alt=""></li>' );
        //add the pager
        $( '#rslides-pager' ).prepend( '<li><a href="javascript:;"># here</a></li>' );
    });

    //want to call loadSlider(); AFTER everything above is completed                        
}
8
user756659

$.each()は配列を同期的に反復するため、$.each();呼び出しの後にコードを実行するだけで済みます。

if (response.success) {
    $.each( response.screenshots, function( index, value ) {
        // do stuff
    });

    loadSlider();
}

AJAXについておっしゃるように、実際の成功コールバック(つまり、投稿したコードが含まれている可能性が最も高い関数)のみが非同期で実行されます。その関数内のコードはすべて同期的に実行されます(もちろん、そこで別の非同期関数を呼び出さない限り)。

27
ThiefMaster