Promettre des questions d'entrevue et un jugement sur le statut de la valeur de retour

Une question codée fréquemment posée dans les entretiens

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)

analyser:

1. Premièrement, l'état de p est que la valeur de résolution est 1

2. Parce que l'état de p est résolu, exécutez la fonction d'incrémentation et la valeur d'incrémentation est 1

La valeur de retour est 2 , donc le statut de l'incrément est resolve , donc continuez à exécuter la fonction doubleUp

3. Par analogie, la sortie finale est 4

Questions courantes à remplir en blanc dans les entretiens

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

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

Effet : exécutez d'abord la sortie et attendez deux secondes avant de sortir " opération suivante "

analyser:

        La sortie après deux secondes nécessite une minuterie pour sortir une seule fois, utilisez donc setTimeout

        La sortie est alors, donc l'état de veille doit être résolu

Code d'implémentation

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

Comment juger de l'état de la valeur de retour de la promesse

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)

Résultat de sortie : Tâche 1

Étape 1 : Puisque l'état de p est résolu, dans p.then(do1), la fonction do1 sera exécutée. sortir任务1

     L'état de p1 est déterminé par do1(). Étant donné que do1 ne spécifie pas explicitement la valeur de retour, la valeur de retour n'est pas définie.

               Le statut est résolu.

Étape 2 : Ensuite, regardez p2. Puisque l'état de p1 est résolu, il n'exécutera pas do2, l'état de p2 n'a pas changé et il est toujours

                Conserver l'état de p1 : résolu.

Résumer

1. Si l'état de p1 est en attente, l'état de p2 est également en attente

2. Si l'état de p1 est résolu, then() exécutera do2, alors l'état de p2 est déterminé par la valeur de retour de do2

2.1 Si la valeur de retour de do2 n'est pas un objet de promesse, l'état de p2 est résolu et la valeur de promesse de p2 est la fonction do2

     valeur de retour

2.2 Si la valeur de retour de do2 est un objet de promesse, alors l'état de p2 et le promiseValue sont basés sur l'objet de promesse

2.3 Si une erreur se produit dans la fonction f_ok (ou si l'utilisateur génère activement une erreur), le statut de p2 est rejeté et p2

    La promiseValue est cet objet d'erreur

Rejeté correspond à résolu et je n'entrerai pas dans les détails

Si vous ne comprenez pas ce qui précède, vous pouvez vous référer à la compréhension personnelle suivante :

        Si la fonction d'exécution a return, la valeur est la valeur retournée par return

        Si la fonction d'exécution ne retourne pas, la valeur retourne un indéfini

Dans les deux cas, le statut de la fonction est résolu

Alors qu'est-ce qui est rejeté ?

        S'il y a une erreur ou si la fonction est définie sur l'état rejeté, elle sera rejetée, sinon elle ne sera pas rejetée

Je suppose que tu aimes

Origine blog.csdn.net/swoly2894265391/article/details/124546938
conseillé
Classement