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