Aşağıdaki sorun üzerinde çok uzun bir süre boyunca sıkışmış durumdayım ve Javascript'teki değişken kapsam ve geri arama işlevleri hakkındaki teorik bilgilerimi gerçekten dikkate almam gerekiyor. Benim problemim için hızlı bir düzeltmeden ziyade, benim problemimin arkasındaki teoriyi açıklamaya çalışan genel bir cevap tercih edilir. İşte kod (çalışmıyor) (oh ve jQuery'nin $ .getJSON kullanır). JavaScript geri çağırma işlevleri ile değişken kapsamını ve kapanışları anlama
function getStreamerStatus(streamer) {
var channelurl = "https://api.twitch.tv/kraken/channels/";
var streamurl = "https://api.twitch.tv/kraken/streams/";
var temporary = {
status: "",
game: "",
picture: "",
name: streamer,
link: "https://www.twitch.tv/" + streamer
};
$.getJSON(streamurl + streamer, createCallback(temporary));
$.getJSON(channelurl + streamer, createCallback(temporary));
return temporary;
}
Bazı arama yaptıktan sonra ben "geçici" geri arama işlevi görebileceği nesne yapmak için bir girişim "createCallback()" fonksiyonu kullanılır.
function createCallback(tmpobj) {
return function(json) {
//get's some information and stores it in the object passed as tmpobj
filterOut(json, tmpobj);
};
}
ve ana işlevi sonunda
I seğirme flamalar isimlerini içeren bir dizi ve her biri adı "getStreamerStatus()" fonksiyonu olarak adlandırılır ve döndürülen bir amacı bir dizi depolanır.function TwitchInit() {
var channels = [/*filled with strings of streamer names*/];
var response = []; //array with objects with all the information
for(var i = 0; i < channels.length; i++) {
response.push(getStreamerStatus(channels[i]));
}
parseContent(response); //not relevant for now
//for debugging
for(var j = 0; j < response.length; j++) {
console.log("--responseArray with Objects--");
for(var prop in response[j]) {
if(response[j].hasOwnProperty(prop)) {
console.log(prop + ": " + response[j][prop]);
}
}
}
}
Buradaki sorun ben konsolda sadece "bağlantı" ve nesnelerin "ad" özelliklerine nesneleri giriş yaparsanız bazı içerik ve yazılmalı zannediyorsunuz diğer özelliklere sahip olmasıdır " filterOut() "işlevi her zaman boş kalır. Konsola göre, Twitch sunucusu ile iletişim iyidir ve yanıt üstbilgisini/nesnesini konsoldan okuyabiliyorum, böylece kural dışıdır. Ayrıca, "ad" ve "link" özellikleri de her konsolda her defasında farklı olduğu için, her defasında yeni bir nesnenin oluşturulduğu anlamına gelir. Bu, "geçici" nesnesinin, nesnenin "filterOut()" işlevine görünür hale getirilmesi için "createCallback()" ile yapılan girişime rağmen $ .getJSON içinde geri arama işlevi için hala bir şekilde görülemeyeceği sonucuna götürür. JavaScript'in değişken kapsamı hakkında birçok bilgi buldum ancak şu ana kadar sorunumu çözmeme yardımcı olmadı. Burada yanlış yaptığım konusunda hiçbir fikrim yok ve hayal kırıklığına uğramaya başlıyorum. Umarım birileri beni burada aydınlatır.
Yeni geçici(), 'createCallback() işlevine bir argüman olarak 'deneyin, böylece ilk sorgudaki sonuçlar ikincinin üzerine yazılmaz. Ayrıca, 'createCallback()' işlevi bir işlevi döndürür (özellikle işlev hiç çalışmadığı için bir işlevin çıktısını değil). Json'un değerinin nereden geldiğini göremiyorum. 'CreateCallback' kesinlikle bunun ne olduğunu bilmiyor. Gönderiniz, almayı düşündüğünüz çıktının biçimini ve aldığınız çıktıyı da içermelidir. – LinuxDisciple
İşlev filtresini da gösterebiliyor musunuz? Verilerinizi dolduran biri gibi görünüyor – user3
@ user3 Daha önce vardı, sonra kaldırıldı. İsterseniz düzenleme geçmişinde. Eminim asla koşmaz. – LinuxDisciple