function* gen() {
yield makeProm("first");
yield makeProm("second");
yield makeProm("first2.0");
yield makeProm("second2.0");
}
function makeProm(msg){
return new Promise(function(resolve,reject){
console.log('promised')
resolve(msg)
}
)
}
let iter = gen();
function iterStep() {
let result = iter.next();
if(!result.done){
console.log(result.value)
result.value.then(msg => console.log(msg))
iterStep();
}
}
iterStep();
function makeProm(msg){
return new Promise(function(resolve,reject){
console.log('promised')
resolve(msg)
}
)
}
makeProm("first").then(msg => {console.log('promised'); console.log(msg); return 'second'})
.then(msg => {console.log('promised'); console.log(msg); return 'first2.0'})
.then(msg => {console.log('promised'); console.log(msg); return 'second2.0'})
.then(msg => { console.log(msg);})
Зачем это :
Если можно так :
makeProm("first")
.then(msg => {console.log('promised'); console.log(msg); return makeProm('second')})
// .then(/* тут Успех для промиса 'second' ... и запускаем промис 'first2.0' */)
// .catch(/* тут Ошибка для промиса 'second' */)
.then(msg => {console.log('promised'); console.log(msg); return makeProm('first2.0')})
// .then(/* тут Успех для промиса 'first2.0' ... и запускаем промис 'second2.0' */)
// .catch(/* тут Ошибка для промиса 'first2.0' */)
.then(msg => {console.log('promised'); console.log(msg); return makeProm('second2.0')})
// .then(/* тут Успех для промиса 'second2.0' */)
// .catch(/* тут Ошибка для промиса 'second2.0' */)
//
// В следующем блоке .then() мы уже потеряли данные из предыдущих промисов (тут будет последний промис)
// Тоже самое и с ".catch" блоками, если у каждого промиса не обработать ошибку,
// то ошибка может произойти в первом промисе, а перехватим её уже в последнем блоке,
// без идентификации из какого промиса мы словили ошибку
.then(msg => { console.log(msg) })
.catch(err => { console.log(err) })
// Второй пример:
Promise.resolve("A__2")
.then(message => {console.log(message); return "B__2"})
.then(message => {console.log(message); return "C__2"})
.then(message => {console.log(message); return "D__2"})
.then(message => {console.log(message);});
// Первый пример (да, вот так это должно выглядеть):
function* messageGenerator() {
yield Promise.resolve("A");
yield Promise.resolve("B");
yield Promise.resolve("C");
yield Promise.resolve("D");
}
for (const messagePromise of messageGenerator()) {
messagePromise.then(message => console.log(message + "1"));
}
A__2
A1
B1
C1
D1
B__2
C__2
D__2