В настоящее время я использую обещания, чтобы предотвратить необходимость вложенных обратных вызовов в моем коде, но я ударил неудачу. В этом случае я использую request-обещание узла и cheerio для эмуляции jQuery на сервере. Однако в какой-то момент мне нужно позвонить jQuery.each()
, чтобы создать запрос для каждого элемента <a>
. Есть ли способ, которым я могу использовать обещания для предотвращения этого вложенного обратного вызова?Предотвращение вложенных обратных вызовов в JavaScript, использующих итерацию
request("http://url.com").then(function (html) {
var $ = cheerio.load(html);
var rows = $("tr.class a");
rows.each(function (index, el) {
//Iterate over all <a> elements, and send a request for each one.
//Can this code be modified to return a promise?
//Is there another way to prevent this from being nested?
request($(el).attr("href")).then(function (html) {
var $ = cheerio.load(html);
var url = $("td>img").attr("src");
return request(url);
})
.then(function (img) {
//Save the image to the database
});
});
});
Вам не нужно «Promise.resolve». – SLaks
@SLaks ждут, неважно - да. Хотя они используют Bluebird - они не раскрывают свои методы снаружи (бог знает почему), так что решите _is_. –
Тогда что именно оно возвращается? Кроме того, вам не хватает ')'. – SLaks