SORU
26 Kasım 2010, Cuma


Asenkron döngüsü için JavaScript

Bunu nasıl yapabilirim...? Herhangi bir fikir var mı? Teşekkür ederim.

for ( /* ... */ ) {

  someFunction(param1, praram2, function(result) {

    // Okay, for cycle could continue

  })

}

alert("For cycle ended");

CEVAP
26 Kasım 2010, Cuma


JavaScript komut dosyası engellerseniz, Tarayıcı blok senkron ve asenkron karıştıramazsın.

Tam olay neyse ki çirkin şeylerden uzak saklanabiliriz buraya tahrik gitmek gerekir.

DÜZENLEME:Kod güncellendi.

function asyncLoop(iterations, func, callback) {
    var index = 0;
    var done = false;
    var loop = {
        next: function() {
            if (done) {
                return;
            }

            if (index < iterations) {
                index  ;
                func(loop);

            } else {
                done = true;
                callback();
            }
        },

        iteration: function() {
            return index - 1;
        },

        break: function() {
            done = true;
            callback();
        }
    };
    loop.next();
    return loop;
}

Bu bize zaman uyumsuz loop, elbette örneğin döngü durumunu kontrol etmek için bir işlevi almak için daha da değiştirebilirsiniz vb sağlayacaktır.

Teste şimdi:

function someFunction(a, b, callback) {
    console.log('Hey doing some stuff!');
    callback();
}

asyncLoop(10, function(loop) {
    someFunction(1, 2, function(result) {

        // log the iteration
        console.log(loop.iteration());

        // Okay, for cycle could continue
        loop.next();
    })},
    function(){console.log('cycle ended')}
);

Ve çıktı:

Hey doing some stuff!
0
Hey doing some stuff!
1
Hey doing some stuff!
2
Hey doing some stuff!
3
Hey doing some stuff!
4
Hey doing some stuff!
5
Hey doing some stuff!
6
Hey doing some stuff!
7
Hey doing some stuff!
8
Hey doing some stuff!
9
cycle ended

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Barnacules Nerdgasm

    Barnacules N

    20 Temmuz 2006
  • Benjamin Heckendorn

    Benjamin Hec

    4 Mayıs 2008
  • Gavin Hoey

    Gavin Hoey

    21 Aralık 2007