Ответ 1
Когда вы вернете обещание от then
, оно решит, когда это обещание будет решено:
Итак, если следующий нужен только предыдущий:
loadDependency1().then(function(dependency1) {
return loadDependency2(dependency1);
}).then(function(dependency2) {
return loadDependency3(dependency2);
}).then(function(dependency3) {
doWork(dependency3);
});
Работает, если вам нужна третья зависимость.
Если зависимости не зависят друг от друга:
Promise.all([loadDependency1(),loadDependency2(),loadDependency3])
.spread(function(dep1,dep2,dep3){
doWork(dep1,dep2,dep3);
});
Если вы хотите сохранить "состояние" по цепочке обещаний и используете современную библиотеку обещаний, такую как Bluebird, вы можете сделать:
loadDependency1().bind({}).then(function(dependency1) {
this.dep1 = dependency1;
return loadDependency2(dependency1);
}).then(function(dependency2) {
this.dep2 = dependency2;
return loadDependency3(dependency2);
}).then(function(dependency3) {
doWork(this.dep1, this.dep2, dependency3);
});
Если вы не (и вы действительно должны быть:)), вы можете .all
вы обойти его:
loadDependency1().then(function(dependency1) {
return [loadDependency2(dependency1),dependency1];
}).spread(function(dependency2,dep1) {
return [loadDependency3(dependency2),dependency2,dep1];
}).spread(function(dependency3,dependency2,dependency1) {
doWork(dependency1, dependency2, dependency3);
});