У меня есть функция, которая создает объект базы данных из трех массивов. Массивы заполняются в каждом цикле, один из массивов опирается на значение в той же итерации цикла.
Зависимый массив использует библиотеку requests и cheerio, чтобы получить строку для заполнения массива.
В настоящее время зависимый массив заполняется нулями, что, я думаю, связано с тем, что цикл не ожидает возврата запроса.
Я все еще учусь и хотел бы, чтобы это работало без прямой блокировки, чтобы сохранять асинхронность, поэтому я изучаю обещания/обратные вызовы.
Это делается на стороне сервера, но из того, что я видел в документах cheerios, возможности промисов нет.
Вот что у меня есть до сих пор. (getFile() — это функция, которая не заполняет массив «c», она также зависит от текущего значения, помещаемого в «b»). Я знаю, что функция getFile получает правильное значение с помощью теста журнала консоли, поэтому проблема должна быть в реализации заполнения «c».
addToDB() - это функция, которая сохраняет значение в mongoDB, из тестирования я знаю, что объекты правильно помещаются в базу данных, просто массив c неверен.
function getInfo(path) {
$(path).each(function(i,e) {
a.push(...)
b.push(value)
c.push(getFile(value))
})
var entry = new DB...//(a,b,c)
addToDB(entry);
}
function getFile(...) {
request(fullUrl, function (err, resp, page) {
if (!err && resp.statusCode == 200) {
var $ = cheerio.load(page); // load the page
srcEp = $(this).attr("src");
return srcEp;
} // end error and status code
}); // end request
}
Я читал об обещаниях/обратных вызовах, а затем(), но я еще не нашел ничего, что работает.
addToDB()
- это ваша асинхронная операция. Если это так, то чтобы мы могли помочь вам решить эту проблему, вам нужно будет показать этот код. Вот где должны произойти настоящие изменения. - person jfriend00   schedule 08.08.2015getFile()
асинхронный вызов? Можете показать, как это выглядит? Если он асинхронный, он не может вернуть такое значение, но может вернуть обещание. - person John S   schedule 08.08.2015getFile()
. Вы, кажется, не понимаете, что НЕ показали наиболее важную часть кода - часть, которая где-то делает асинхронный запрос. Мы не сможем вам помочь, пока вы не опишете и не раскроете асинхронную часть своего кода. - person jfriend00   schedule 08.08.2015getFile()
к вашему вопросу. Это очень актуально для вашего вопроса и требуется, чтобы люди понимали, что вы делаете. Я также предположил бы, что функцияaddToDB()
также может иметь асинхронный компонент. - person jfriend00   schedule 08.08.2015paths
массивом js или объектом cheero? - person Roamer-1888   schedule 10.08.2015