Cómo Promise concatena múltiples tareas sincrónicas y asincrónicas

Then() de Promise devuelve una nueva promesa, que se puede abrir en una llamada en cadena de then(), y se pueden conectar múltiples tareas sincrónicas/asincrónicas en serie a través de la llamada en cadena de 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);
})

Insertar descripción de la imagen aquí
1. Cuando la tarea asincrónica en la Promesa no se haya ejecutado, no ingresará a la función de devolución de llamada .then (ver Tarea 1)

2. Cuando la función de devolución de llamada en .then es una tarea sincrónica, el valor se puede pasar al siguiente .then en forma de retorno + valor (ver tarea 2)

3. Cuando la función de devolución de llamada en .then es una tarea asincrónica, el valor no se puede pasar al siguiente .then en forma de retorno + valor, y se ejecutará directamente (ver tarea 4)

4. Cuando la función de devolución de llamada en .then sea una tarea asincrónica, cree un nuevo objeto Promise para contener la tarea asincrónica. Debe agregar retorno antes de la nueva Promesa, para que el valor pueda pasarse al siguiente .then, y la ejecución no continuará hasta que se complete el .then actual (consulte la tarea 3).

Supongo que te gusta

Origin blog.csdn.net/weixin_46683645/article/details/118416945
Recomendado
Clasificación