Preguntas de entrevista de promesa y juicio de estado de valor de retorno

Una pregunta clave que se hace con frecuencia en las entrevistas

function increment(value) {
    return value + 1;
}
function doubleUp(value) {
    return value * 2;
}
function output(value) {
    console.log(value);// => (1 + 1) * 2
}
var p = Promise.resolve(1);
p.then(increment)
 .then(doubleUp)
 .then(output)

analizar:

1. Primero, el estado de p es que el valor de resolución es 1

2. Debido a que el estado de p es resuelto, ejecute la función de incremento y el valor de incremento es 1

El valor devuelto es 2 , por lo que el estado del incremento es resolver , así que continúe ejecutando la función doubleUp

3. Por analogía, la salida final es 4

Código común de preguntas para completar espacios en blanco en las entrevistas

function sleep(time){
    // 请写出你的代码
}

sleep(2000).then(()=>{
    console.log("后续操作")
})
console.log(2);

Efecto: primero ejecute la salida y espere dos segundos antes de generar la " operación posterior "

analizar:

        La salida después de dos segundos requiere un temporizador para emitir solo una vez, así que use setTimeout

        La salida está en ese momento, por lo que el estado de suspensión debe resolverse.

Código de implementación

function sleep(time){
	return new Promise(function(resolve,reject){
        // 异步操作,根据执行结果,决定是否调用 resolve,reject
        setTimeout(function(){
            resolve()
        }, time)
    })
}

Cómo juzgar el estado del valor de retorno de la promesa

function do1() {
    console.log("任务1");
}
function do2() {
    console.log("任务2");
}

var p = new Promise((resolve,reject)=>{ resolve()})
p.then(do1)
 .catch(do2)

var p1 = p.then(do1)
var p2 = p1.then(do2)

Resultado de salida: Tarea 1

Paso 1: Como se resuelve el estado de p, en p.then(do1), se ejecutará la función do1. producción任务1

     El estado de p1 está determinado por do1(). Debido a que do1 no especifica explícitamente el valor devuelto, el valor devuelto no está definido.

               El estado está resuelto.

Paso 2: A continuación, mira p2. Dado que el estado de p1 está resuelto, no ejecutará do2, el estado de p2 no ha cambiado y todavía está

                Mantener el estado de p1: resuelto.

Resumir

1. Si el estado de p1 está pendiente, entonces el estado de p2 también está pendiente

2. Si se resuelve el estado de p1, entonces () ejecutará do2, luego el estado de p2 se determina por el valor de retorno de do2

2.1 Si el valor de retorno de do2 no es un objeto de promesa, el estado de p2 se resuelve y el valor de promesa de p2 es la función do2

     valor devuelto

2.2 Si el valor de retorno de do2 es un objeto de promesa, entonces el estado de p2 y el valor de promesa se basan en el objeto de promesa

2.3 Si ocurre un error dentro de la función f_ok (o el usuario lanza activamente un error), el estado de p2 es rechazado y p2

    ElpromiseValue es este objeto de error

Rechazado es consistente con resuelto y no entraré en detalles

Si no entiende lo anterior, puede consultar el siguiente entendimiento personal:

        Si la función de ejecución tiene retorno, el valor es el valor devuelto por retorno

        Si la función de ejecución no regresa, el valor devuelve un indefinido

En ambos casos se resuelve el estado de la función

Entonces, ¿qué se rechaza?

        Si hay un error o la función se establece en el estado rechazado, se rechazará; de lo contrario, no se rechazará.

Supongo que te gusta

Origin blog.csdn.net/swoly2894265391/article/details/124546938
Recomendado
Clasificación