2017-11-20 1 views
2

私は関数コールバック地獄を避ける約束を使用することを知っていますが、私の質問は、イベントループで約束コードが実行され、コードが本当に非同期かどうかです。promiseはどのようにコードを非同期にするのですか?

私は、約束の範囲内で実行されているという理由だけで、このコードは非同期ですか? 約束はイベントループの一部ではありませんか?

const p = new Promise((resolve,reject) =>{ 
 

 
    resolve('am i part of the event loop ? , am i a diffrent thread ? or am i synchronized? ') 
 

 
})

+4

"どうすれば非同期コードを約束しますか"それは、渡された関数が非同期を呼び出すことを期待しています。 – Teemu

+1

質問のコードのどれも非同期に実行されません –

+1

@ c69:解決と拒否は非同期的に呼び出されます**、あなたの関数はそれらを呼び出す約束コンストラクタに渡されます。そして、この関数はpromiseコンストラクタによって同期的に実行されます。非同期性を導入することができるのは関数の本体です(ただし必須ではありません)。関数に非同期関数がない限り、resとrejの両方が同期的に呼び出されます。 –

答えて

4

どのように約束はコードを非同期に作るのですか?

これはありません。

プロミスは、非同期機能を処理するための標準インターフェース(例えば、.then()メソッド)を提供します。

プロビジョニング内で実行されるすべてが非同期でない場合、コードはまだ非同期です。

const p = new Promise((resolve, reject) => { 
 
    console.log(1); 
 
    resolve(); 
 
    console.log(2); 
 

 
}); 
 
console.log(3);

あなたは約束は、他の非非同期コードがあると同じようにブロックしていることを、上記の、見ることができます。

+3

Uhhh、 '.then()'ハンドラは常に非同期に呼ばれるというやや複雑なことがあります。おそらくその点を明確にする価値がある。 – jfriend00

関連する問題