Если вы хотите объединить и по-прежнему иметь возможность выполнять асинхронный код c в продолжении then
, вы должны вернуть обещание, которое разрешается только тогда, когда результат готов.
В вашем фрагменте вы на самом деле не возвращаете никаких значений (или обещаний) из цепочки then
s, которые могут быть использованы по конвейеру. По этой причине результат автоматически преобразуется в разрешенное обещание, которое не имеет никакого значения.
const one = document.getElementById('one');
function clkw(a){
return new Promise(res => {
setTimeout(() => {
one.innerHTML = a;
res(2*a);
}, 2000);
});
}
function clkw2(b){
return new Promise(res => {
setTimeout(() => {
one.innerHTML += ' '+b;
res();
}, 2000);
});
}
function trypromise(){
const np = new Promise(resolve => {
setTimeout(() => {
resolve(10)
}, 2000);
});
np
.then(function(data){
return clkw(data);
})
.then(function(bata){
clkw2(bata);
});
}
trypromise();
<div id='one'></div>