JS Promise 非同期プログラミングの面接の質問の分析

トピック

let main = () => {
    
    
	console.log("A");
	setTimeout(() => {
    
    //setTimeout方法的 开始
		console.log("B");
			new Promise((resolve) => {
    
     //第一个promise异步 开始
				console.log("C");
				resolve();
			}).then(() => {
    
     // 第一个promise异步之后执行的then
				console.log("D");
			})
		console.log("E");
	});                 //setTimeout方法的 结束
	new Promise((resolve) => {
    
    //第二个promise异步 开始
		console.log("F");
		resolve();
	}).then(() => {
    
     //第二个promise异步的then
		console.log("G");
	})
	
	console.log("X");
}
main();
//请写出打印顺序
//答案:A F X     G B C E    D

1. 非同期プログラミングとは何ですか?

同期するコードの順序で実行します。非同期コードは順番に実行されません。
Promise は、複雑な非同期タスクをよりエレガントに記述するために ES6 によって提供されるクラスです。
Promise オブジェクトには、保留中 (進行中)、解決済み (完了)、拒否済み (失敗) の 3 つの状態があります。
Promise のパラメータは 2 つの関数です。
Promise コンストラクターは関数をパラメーターとして受け取ります。この関数は同期的であり、すぐに実行されます。, したがって、これを開始関数と呼びます。開始関数には、Promise の成功と失敗のステータスをそれぞれ示す、resolve と拒否の 2 つのパラメーターが含まれています。

質問のresolve(data);は、Promiseの非同期状態をResolved completed状態に変更することで、.thenを実行できるようになります。
solve(data) のデータは then にデータを渡すことになります。

2.setTimeout(fn,time);

setTimeout はコールバック関数のメソッドでもあります;
例: setTimeout(print, 3000); //3 秒後に print メソッドを実行します。
setTimeout と Promise の違い:
Promise のコールバック関数は垂直方向に記述されますが、setTimeout は入れ子形式で記述されるため、後のメンテナンスには役立ちません。

3. 質問を分析する

Promise はビルド後すぐに実行されます(そのため、Promise は通常、関数にラップされて返されます)。例を以下に示します。setTimeout はパラメータ時間に従ってメインスレッドに入れられます。

function print(delay, message) {
    
    
    return new Promise(function (resolve, reject) {
    
    
        setTimeout(function () {
    
    
            console.log(message);
            resolve();
        }, delay);
    });
}

1) setTimeout セッションがメイン スレッドに配置されるため、メイン スレッドは次のコードの実行を開始します。.then はコールバック関数でもあり、後で実行されます。

let main = () => {
    
    
	console.log("A");
	          //setTimeout方法的 结束
	new Promise((resolve) => {
    
    //第二个promise异步 开始
		console.log("F");
		resolve();
	})
	})
	
	console.log("X");
}
main();
//打印:A F X

2) 前のステップで 2 番目の Promise が構築および実行されているため、今回はコールバック関数の実行が開始されます。

.then(() => {
    
     //第二个promise异步的then
		console.log("G");
	})
//打印:A F X G

3) メインスレッドの後に追加された関数 setTimeout の実行を開始します

setTimeout(() => {
    
    //setTimeout方法的 开始
		console.log("B");
			new Promise((resolve) => {
    
     //第一个promise异步 开始
				console.log("C");
				resolve();
			})
		console.log("E");
	});    
	//打印:A F X G B C E 

4) Promise 同期スレッドが実行された後、最初の Promise 非同期コールバック関数を実行します。

.then(() => {
    
     // 第一个promise异步之后执行的then
				console.log("D");
			})
			//打印:A F X G B C E D

Supongo que te gusta

Origin blog.csdn.net/m0_56414330/article/details/129755961
Recomendado
Clasificación