如何等到一些jQuery方法完成
How to wait until some jQuery methods are finished?
我正在使用Node.js与cheerio
(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()
函数,以确保函数(显式)顺序执行。
相关文章:
- 如何在扩展jQuery方法时传递参数
- 用jQuery方法扩展Zepto.js?scrollTop()
- 如何使用页面's的jQuery方法
- 在 JQUERY 中创建 HTML 后,Jquery 方法不起作用
- 下拉 jquery 方法发布表单不起作用
- jQuery方法未按预期工作-toggleClass
- jQuery 方法调用了两次
- jQuery方法添加一个TextBox
- 在coffeescript中链接jquery方法和参数
- 在jQuery方法中编写自定义属性的正确语法是什么
- 我的jquery方法没有'不起作用
- jQuery方法找不到选择器
- 单击按钮后需要jQuery方法重定向-ASP.NET、VB.NET、jQuery、Javascript
- 如何在jquery方法中创建一个if语句
- 在jQuery方法中实现Javascript变量
- 使用参数作为jQuery方法
- 对从Ajax返回的数据使用Jquery方法,不打印数据
- 如何通过 .ajax() jQuery 方法获取 Carrierwave 上传到 Amazon S3 的图像的 URL
- 如何调用 jQuery 方法
- 插件中的元素不接受 jQuery 方法