簡體   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