[英]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.