promise非同期構造関数

6720 ワード

以下は個人的な理解です.
   javascriptサポート
 1 let mypromise = new Promise(function(resolve){
 2 setTimeout(() => {
 3  console.log("  ")
 4  resolve()
 5 }, 1000);
 6  })
 7  mypromise.then(function(){
 8   setTimeout(() => {
 9    console.log("  ")
10   }, 1000);
11  })          //      
  同期と非同期コードですが、実行中に先に同期コードを実行してから非同期コードを実行します.
1 setTimeout(() => {
2   console.log("1")
3  }, 1000);
4  console.log("2")//2  1       ,         
プロミスがない前に、非同期コードを実行した後、他の非同期コードを実行し続けるなら、このように書くしかないです.
setTimeout(() => {
  console.log("  ")
   setTimeout(() => {
    console.log("  ")
     setTimeout(() => {
      console.log("  ")
      setTimeout(() => {
       console.log("  ")
      }, 1000);
     }, 1000);
   }, 1000);
 }, 1000);//             
 上記のコードは長いものを見ています.一つのエラーで、気づきにくいです.もし複数の非同期コードがあれば、ずっと下に積み重ねていくしかないです.読み取り可能性は高くないです.次にプロミセという非同期構造関数が現れて、非同期コードを処理します.以下はプロミセで上記のコードを変えます.
let mypromise = new Promise(function(resolve){
setTimeout(() => {
 console.log("  ")
 resolve()
}, 1000);
 })
 mypromise.then(function(){
  setTimeout(() => {
   console.log("  ")
  }, 1000);
 })          //      
上記から私達はPromiseが一つのコールバック関数を受信することを知っています.コールバック関数は二つのパラメータを受信します.
 レスリング:解決 => 関数の実行に成功しました
 resoliveが実行されるとPromiseはこの時点で関数が実行され成功したことを知っています.resoliveの方法は非同期の方法です. 絶対非同期で実行されます.現在のコードブロックでは
 reject:  拒否 => 関数の実行に失敗しました
 rejectが実行されるとPromiseはこの時関数の実行が失敗したことを知っています.
 複数の非同期時間を実行するなら、一つの関数をカプセル化してもいいです.
 then  コンストラクタの実例となるオブジェクトmypromise の一つの方法は、プロミセが実行された後に実行されることを解釈して、reloveの中から入ってきたパラメータを受信すると、空ではなく、中にあるコールバック関数を書き込みます.
 1 function work(item,time){
 2  return  new Promise(function(resolve,reject){
 3   setTimeout(() => {
 4    console.log(`${item}`)
 5    resolve()
 6   }, time);
 7   
 8  })
 9 }
10 work("  ",1000).then(function(){
11  return  work("  ",1000)
12 }).then(function(){
13    return work("  ",1000)
14 })                            //          
 このように、非同期コードチェーンが現れます. 次に私たちはレスリングを結合します. とreject 一緒に使う
function rand(){
  return new  Promise((resolve,reject) =>{
   let result = Math.random()
   if(result > 0.5)
   resolve(result)
   else reject(result)
  })
 }
 rand().then(function(result){
  console.log("  ")
 }).catch(function(result){
  console.log("  ")
 })