我已经完成了恢复旧javascript代码的任务。新系统使用蓝鸟承诺。 我已经做了一些改变来使用它们,但我已经到了这一步,我不确定,如果我将要实现它的方式,将是最好的。
在这里,我将展示旧代码的片段:
[...] // 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
等等)
在旧代码中,所有这些块都是一个接一个。我不得不将它们分开,以某种方式将它们与承诺一起使用。
所以问题是 - 如何处理blob 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() ...
答案 0 :(得分:3)
您的代码已准备就绪 - 您只需将代码放在X2 and X3 blobs won't be accessible here
所在的位置即可放到链中的下一个then
- 因为Promise.each
(正确地)在{ {1}}它不会到达该区域。
return