O then() da Promise retorna uma nova promessa, que pode ser aberta em uma chamada em cadeia de then(), e várias tarefas síncronas/assíncronas podem ser conectadas em série por meio da chamada em cadeia do then.
new Promise((resolve, reject) => {
setTimeout(() => {
console.log('我是异步任务1');
resolve(111);
},3000)
}).then(value => {
console.log('任务1的值:', value);
console.log('我是同步任务2');
return 222;
}).then(value => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('任务2的值:', value);
console.log('我是异步任务3');
resolve(333);
},3000)
})
}).then(value => {
setTimeout(() => {
console.log('任务3的值:', value);
console.log('我是异步任务4');
return 444;
},3000)
}).then(value => {
console.log('任务4的值:', value);
})
1. Quando a tarefa assíncrona no Promise não for executada, ela não entrará na função de retorno de chamada .then (consulte a Tarefa 1)
2. Quando a função de retorno de chamada em .then é uma tarefa síncrona, o valor pode ser passado para o próximo .then na forma de retorno+valor (ver tarefa 2)
3. Quando a função de retorno de chamada em .then é uma tarefa assíncrona, o valor não pode ser passado para o próximo .then na forma de retorno + valor e será executado diretamente (ver tarefa 4)
4. Quando a função de retorno de chamada em .then for uma tarefa assíncrona, crie um novo objeto Promise para conter a tarefa assíncrona. Você precisa adicionar return antes da nova promessa, para que o valor possa ser passado para o próximo .then, e a execução não continuará até que o .then atual seja concluído (consulte a tarefa 3)