我一直在尝试用JQuery和javascript创建一个RSS阅读器,但事实证明javascript在等待jquery结束之前没有继续,导致一些注册失败。
示例的console.logs显示jquery函数的日志显示在常用javascript的日志之后。这会导致函数的结果发生变化,因为它取决于jquery函数。 我想知道如何让javascript等待jquery结束然后再继续。这个想法是所有标有**的过程都发生在调用之后的#34;日志
以下是日志和代码。谢谢你的帮助
----在调用之前
**调用check_feed
**有活动:假
----调用后
----变量结果:noact
**判断item0
** hora vs ult_act:1480805684> 1480798209 = true
**来自coyoteazul的新消息
**判断第1项
** hora vs ult_act:1480766258> 1480798209 = false
**判断第2项
** hora vs ult_act:1480743686> 1480798209 = false
**显示通知
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
function caller(){
console.log("----Before the calling")
var result = check_Feed("https://www.neobux.com/rss/?/601750/", 1480798309)
console.log("----After the calling")
console.log("----variable result: " + result)
}
function check_Feed (FEED_URL, ult_act){
ult_act = parseInt(ult_act)
console.log("**Calling a check_feed")
var titul;
var contador = 0;
var actividad = false;
$.get(FEED_URL, function (data) {
titul = $(data).find("title").first().text();
if (titul == "") {return "F"} //el titulo solo puede estar vacio si el feed esta cerrado
$(data).find("item").each(function () {
console.log("**judging item" + contador)
if (contador < 7){
var el = $(this);
var hora = el.find("pubDate").text()
hora = new Date(hora).getTime()/1000;
console.log("**hora vs ult_act: " + hora + " > " + (ult_act-100) + " = " + (hora > (ult_act-100)))
if (hora > (ult_act-100)){ //solo notifica si la hora supera a la ultima activdad.
var cuerpol = el.children().last().text();
cuerpol = "New message from " + cuerpol;
var linkl = el.find("link").text();
console.log("**"+cuerpol)
setTimeout(function(){ //en firefox si no se muestran a traves de un timeout solo mostrara la 1er notificacion
console.log("** SHOWS A NOTIFICATION");}, 500 * (contador+1))
actividad = true;
}
contador ++;
}
});
});
console.log("**was there activity: " + actividad);
if (actividad)
return "act";
else
return "noact";
}
caller()
答案 0 :(得分:0)
在您尝试以下代码之前的一些事情:
setTimeout
也以类似的方式运作,实质上它会在指定的时间过后执行一个函数。尝试运行此代码,按照您期望的顺序查看结果
function caller() {
console.log("----Before the calling")
check_Feed("https://www.neobux.com/rss/?/601750/", 1480798309);
thisGetsPrintedRightAfter();
}
thisGetsCalledAfterEverything = function(result) {
console.log("----After the calling")
console.log("----variable result: " + result)
}
thisGetsPrintedRightAfter = function() {
console.log("This gets printed right after Calling a check_feed");
}
function check_Feed(FEED_URL, ult_act) {
ult_act = parseInt(ult_act)
console.log("**Calling a check_feed")
var titul;
var contador = 0;
var actividad = false;
$.get(FEED_URL, function(data) {
titul = $(data).find("title").first().text();
if (titul == "") {
return "F"
} //el titulo solo puede estar vacio si el feed esta cerrado
$(data).find("item").each(function() {
console.log("**judging item" + contador)
if (contador < 7) {
var el = $(this);
var hora = el.find("pubDate").text()
hora = new Date(hora).getTime() / 1000;
console.log("**hora vs ult_act: " + hora + " > " + (ult_act - 100) + " = " + (hora > (ult_act - 100)))
if (hora > (ult_act - 100)) { //solo notifica si la hora supera a la ultima activdad.
var cuerpol = el.children().last().text();
cuerpol = "New message from " + cuerpol;
var linkl = el.find("link").text();
console.log("**" + cuerpol);
setTimeout(function() { //en firefox si no se muestran a traves de un timeout solo mostrara la 1er notificacion
console.log("** SHOWS A NOTIFICATION");
console.log("**was there activity: " + actividad);
if (actividad)
thisGetsCalledAfterEverything("act");
else
thisGetsCalledAfterEverything("noact");;
}, 500 * (contador + 1));
actividad = true;
}
contador++;
}
});
});
}
caller()