Я поставил задачу восстановить старый код javascript. Новая система использует обещания bluebird. Я сделал несколько изменений, чтобы использовать их, но я получил на этом этапе, и я не уверен, что, если я это пойму, будет лучшим.Bluebird обещает в цикле
Здесь я покажу фрагмент старого кода:
[...] // X0
.then(function(){
[...] //X1
// XXX
if (assesment.data.AssesmentType == "1" || assesment.data.AssesmentType == "4") {
for (var i = 0; i < assesment.data.Compartments.length; i++) {
for (var b = 0; b < assesment.data.Compartments[i].Species.length; b++) {
assesment.assortmentRow(assesment.data.Compartments[i].Species[b], false);
// assesment.assortmentRow makes ajax request and does other studd
// and now returns a promise
}
}
}
// X2
if (assesment.data.AssesmentType != "2") {
var asortRowRadioBtn = $("#assesment-assortment-compartments input[type='radio']").eq(0);
asortRowRadioBtn.prop("checked", true);
asortRowRadioBtn.trigger("click");
}
[...] //X3
});
Что делает этот код на самом деле не важно, для вас, чтобы помочь. Я только что добавил комментарии, просто для обозначения блоков кода здесь (X0
, X1
, XXX
и т. Д.)
В старом коде все эти блоки были одно за другим. Мне пришлось разбить их, чтобы как-то использовать их с обещаниями.
Так что вопрос - что делать с сгустка XXX
Одна вещь, которую я могу думать -
[...] // X0
.then(function(){
[...] //X1
// new XXX
if (assesment.data.AssesmentType == "1" || assesment.data.AssesmentType == "4") {
return Promise.each(assesment.data.Compartments, function(i) {
return Promise.each(assesment.data.Compartments[i].Species, function(b) {
return assesment.assortmentRow(assesment.data.Compartments[i].Species[b], false);
});
});
}
//X2 and X3 blobs wont be accessible here.
//So should I bring them inside next .then() function ?
//And is it OK for X1 blob and XXX to be in the same then()?
})
.then(function() ...
Но действительно ли, чтобы положить 'X1', где он находится, не так ли? В любом случае, я думаю о том, чтобы вывести его на улицу (прежде). Так же, как 'X2', он не возвращает обещание, но, imo, выглядит уродливо, чтобы разбить код после' XXX', но не после 'X1' только потому, что он не возвращает обещание. – Wish
Если X1 синхронизирован и не прекращает управление (возврат), тогда да. Если я могу спросить - это код в NodeJS? Если да, используете ли вы сравнительно недавнюю версию, а не древнюю? (Скажем, 4+) –
Нет, он запускается в браузере для веб-страницы. – Wish