Дождаться отпработки внутреннего промиса внутри then другого промиса
Есть примерно следующий код:
var state = 'foo';
new Promise((resolve, reject) => {resolve(true)}).then((value) => {
new Promise((resolve, reject) => {resolve(true)}).then((value) => {
state = 'foobar';
}
console.log(state);
})
То есть есть внешний промис, он выполняется, вызывается его then, а в нем другой промис, который тоже выполняется и вызывается его then в котором меняется глобальная переменная. Мне нужно, чтобы then внешнего промиса ждал пока выполнится then промиса внутри него и вывел в итоге 'foobar' в консоли.
Ответы (3 шт):
Автор решения: an_parubets
→ Ссылка
Такой вариант подходит?
let state = 'foo';
new Promise((resolve, reject) => {resolve(true)}).then((value) => {
new Promise((resolve, reject) => {resolve(true)}).then((value) => {
state = 'foobar';
console.log(state);
}
})
Так же как вариант можно использовать async function:
let state = 'foo';
async function fn() {
const res1 = await new Promise((resolve, reject) => {resolve(true)});
const res2 = await new Promise((resolve, reject) => {resolve(true)});
state = 'foobar';
console.log(state);
}
fn()
Автор решения: Dmitrii Sedov
→ Ссылка
Добавьте еще 1 then во внутренний промис! тогда внешний будет ждать выполнения. Либо используйте await к примеру!
var state = 'foo';
new Promise((resolve, reject) => resolve(true)).then((value) => {
new Promise((resolve, reject) => resolve(true)).then(val => {
state = 'foobar'
}).then(() => {
console.log(state);
});
})
var state = 'foo';
new Promise((resolve, reject) => {resolve(true)}).then(async (value) => {
await (async () => {state = 'foobar'})();
console.log(state);
})
Автор решения: Plikard
→ Ссылка
Чтобы внешний промис ждал внутренний, надо возвращать его из внешнего:
var state = 'foo';
new Promise((resolve, reject) => {resolve(true)}).then((value) => {
return new Promise((resolve, reject) => {resolve(true)}).then((value) => {
return 'foobar';
})
}).then(value => {
state = value;
console.log(state);
})