繁体   English   中英

如何等待直到一些jQuery方法完成?

[英]How to wait until some jQuery methods are finished?

我正在使用带有cheerio Node.js(Node.js上的jQuery模块)和fetch (获取诸如request HTML主体的模块)从网站获取一些数据并保存到MongoDB中。

我可以在浏览器中选择jQuery之类的元素

我必须获取一些data并将data传递给callback函数,例如:

var data = "";
var fetchById = function(id, callback){
    var data = $("#"+id).parent().siblings(".someClass").text().replace(/\s/g, ""); // line 3
    callback(null, data);
};

接着 ...

fetchById(10987, function(err, data){
    if(err){
        // errorHandle(err);
    }else{
        // db.save(data);
    }
});

但是有时在第3行成功检索到data之前调用callback ,因此data是一个空字符串""

如何确保第3行结束后调用callback

您可以通过显式队列来完成此操作。 请参阅jQuery API

例如(从API):

$( "#foo" ).slideUp();
$( "#foo" ).queue(function() {
  alert( "Animation complete." );
  $( this ).dequeue();
});

这与首先​​执行.slideUp() ,然后作为回调,执行alert()

对于您的代码,这将变成如下所示:

var data = 0;

$("#some_element").queue("yourQueue", function() {
  console.log("First");

  // first function
  data = $("#"+id).parent().siblings(".someClass").text().replace(/\s/g, "");

  $(this).dequeue("yourQueue");
});

$("#some_element").queue("yourQueue", function() {
  console.log("Second");

  // second function
  callback(null, data);    // if callback() is a declared function, this should work

  $(this).dequeue("yourQueue");
});

$("#some_element").dequeue("yourQueue");

在哪里使用此答案中的代码: 如何使用JQuery将自定义函数链接或排队?

这里要注意的重要一点是,必须在相同的全局元素上调用.queue()函数,以确保函数(显式)顺序执行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM