Я использую Node.js с cheerio
(модуль jQuery на Node.js) и fetch
(модуль, чтобы получить тело HTML, например request
), чтобы получить некоторые данные с сайта и сохранить в MongoDB.Как подождать, пока не будут закончены некоторые методы jQuery?
Я могу выбрать элементы, такие как 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);
}
});
Но иногда callback
вызывается перед тем, как линия 3 успешно прошла trieved data
, поэтому data
пустая строка ""
Как я могу гарантировать, что callback
вызывается после того, как линия 3 закончена?
javascript runes linearly, он не должен запускать «обратный вызов» до того, как закончится 3-я строка, единственным исключением является асинхронный вызов, здесь не выглядит так. – Patrick
Я ожидаю, что вы это сделали, но мы должны быть уверены ... Вы проверили, что только ваша функция 'fetchById' вызывает taht callback? И что единственным вызовом является контекст, который вы сейчас отлаживаете? – Renan
В этом обратном вызове другого вызова не производится. Как уже упоминалось, иногда я успешно получаю данные с помощью методов jQuery, иногда терпит неудачу ... поэтому я думаю, что единственная причина в том, что строка 3 требует разного времени при каждом вызове – kitlee