SORU
3 ŞUBAT 2012, Cuma


Arama Javascript Fonksiyonu Eşzamanlı Olarak Bir Zaman Uyumsuz

İlk olarak, bu çok özel bir durumda bu işin yanlış yolda amaçlı güçlendirme için bir zaman uyumsuz çağrı içine bir çok zaman uyumlu kod temeli olan binlerce satır uzunluğunda ve zamanı değil şu anda göze yeteneği değişiklikler için "doğru yap." Ama gerçeklik ve ideallerim her lif genellikle uyuşmuyor acıyor. Biliyorum bu çok kötü.

TAMAM, en azından, ben nasıl bunu yapabilirim:

function doSomething() {

  var data;

  function callBack(d) {
    data = d;
  }

  myAsynchronousCall(param1, callBack);

  // block here and return data when the callback is finished
  return data;
}

Örnekler (veya bunların eksikliği) kütüphaneler ve bu çözüm için uygun değildir hem de/veya kullanılan kullanın. (Geri çağrılana kadar şey yapıyorsun ki işlevini terk örneğin) donma OLMADAN UI blok yapmak için nasıl somut bir örnek istiyorum. Eğer böyle bir şey JS mümkündür.

CEVAP
3 ŞUBAT 2012, Cuma


< . em ^"sadece yapmam gerektiği hakkında bana söyleme "doğru yol ne olursa olsun" veya"

TAMAM.ama gerçekten doğru yolu... ya da ne yapmam gerekir

"...UI donma OLMADAN blok yapmak için nasıl somut bir örnek istiyorum. Eğer böyle bir şey JS mümkündür."

Hayır, mümkün UI engelleme olmadan çalışan JavaScript engellemek için değil.

Verilen bilgi eksikliği, zor teklif bir çözüm, ama bir seçenek var arama işlevi bazı yoklama için kontrol bir global değişken, o zaman geri set data küresel.

function doSomething() {

      // callback sets the received data to a global var
  function callBack(d) {
      window.data = d;
  }
      // start the async
  myAsynchronousCall(param1, callBack);

}

  // start the function
doSomething();

  // make sure the global is clear
window.data = null

  // start polling at an interval until the data is found at the global
var intvl = setInterval(function() {
    if (window.data) { 
        clearInterval(intvl);
        console.log(data);
    }
}, 100);

Tüm bu doSomething() değiştirebilirsiniz tabi ki varsayar. Eğer öyle bir şey bilmiyorum.

Eğer değiştirilebilir, bilmiyorum neden olmaz sadece geçmek için bir geri arama doSomething() demem diğer geri, ama ben daha iyi dur önce ben başının dertte. ;)


Aman canım, ne olacak. Bu çözüm göstereceğim yani doğru olabilir düşündürmektedir bir örnek verdin

function doSomething( func ) {

  function callBack(d) {
    func( d );
  }

  myAsynchronousCall(param1, callBack);

}

doSomething(function(data) {
    console.log(data);
});

Örnek zaman uyumsuz çağrı geçirilen bir geri içerir çünkü, doğru şekilde geri gelen çağrılacak doSomething() bir işlevi geçmek olacaktır.

Eğer geri arama yapıyor tek şey tabii ki sadece func doğrudan geçersin...

myAsynchronousCall(param1, func);

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Mindy

    Mindy

    20 NİSAN 2006
  • TechBalance

    TechBalance

    12 HAZİRAN 2011
  • TheDamnWreckless

    TheDamnWreck

    12 Temmuz 2010