Если вы хотите составить два обещания, вы можете вернуть второе в обратном вызове, переданном Promise.prototype.then
первого обещания.
Посмотрите на следующий код:
const sleep = ms => () => new Promise((resolve, reject) => window.setTimeout(resolve, ms));
Promise.resolve()
.then(() => { console.log('A1');})
.then(sleep(2000))
.then(() => {console.log('A2');});
Promise.resolve()
.then(() => {console.log('B1');})
.then(sleep(1000))
.then(() => {console.log('B2');});
Функция sleep
является функцией более высокого порядка, которая возвращает другую функцию, которая возвращает обещание.Это обещание разрешается в вызове Window.setTimeout
, параметризованном ms
, переданном sleep
.
Как вы можете видеть, выполнение выполняется с чередованием, и вы увидите выходные данные журнала для оператора console.log('B2')
второго обещания перед выходом для console.log('A2');
первого.