所有javascript结束后jquery运行

时间:2016-12-04 00:20:45

标签: javascript jquery synchronization

我一直在尝试用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()

1 个答案:

答案 0 :(得分:0)

在您尝试以下代码之前的一些事情:

  • jQuery get / post是异步运行的简单ajax调用。至 了解他们你可以开始 here
  • 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()