メモ---簡単に理解するPromiss

2812 ワード

人の文章を見てメモをとった
戻り関数は実は1つのパラメータで、この関数を1つのパラメータとして別の関数に渡し、その関数が実行された後、伝達されたこの関数を実行し、このプロセスは戻ります.
メイン関数の事前にやり終えて、後で伝えられた関数の例を呼び出します:あなたは彼女を家に送って、あなたはきっと言います:“家に着いたら私にメッセージを送ってください.”そしてあなたの彼女は家に帰ってから本当にあなたにメッセージを送った.実はこれがコールバックの過程です.あなたはパラメータ関数(家に着いたらメッセージを送ってください)を彼女に残して、それから彼女は家に帰って、家に帰る動作は主関数です.彼女は先に家に帰ってから、主関数の実行が終わってから、伝達された関数を実行しなければなりません.それから、あなたはメッセージを受け取ります.
// , 
function main( callback ){
    callback();
    console.log(' ');
}

// 
funcation test(){
  setTimeout(()=>{
        console.log(' '); // 
    },3000)
 }

  // , test() 
  main(test);
  // 
   
   

メイン関数を定義するときは、コードにcallback()コールバック関数を先に実行させますが、出力結果はコールバック関数の内容を出力します.これは,主関数がコールバック関数の実行を待つことなく,次に自分のコードを実行できることを示している.一般的にコールバック関数は時間のかかる操作に使われています
promiseは構造関数であり,熟練した方法としてall,reject,resolve,プロトタイプにthen,catchなど同様の熟練した方法がある.
var pro = new Promise((resolve,reject)=>{
       // 
        setTimeout(()=>{
        console.log(“ ”);
        resolve(true);
  },1000)
}) 

Promiseのコンストラクション関数は、関数であるパラメータを受け入れ、非同期操作が成功した後のコールバックと非同期操作の実行に失敗したコールバックの2つのパラメータ:resolve,rejectを入力します.
上はnewのオブジェクトにすぎませんが、呼び出されていません.私たちが伝えた関数はすでに実行されています.これは注意しなければならない詳細です.Promiseを使用する場合は、次のような関数を1つの関数にパッケージし、必要に応じて実行します.
function runAnsy(){
    return  new Promise(()=>{
          setTimeout(()=>{
          console.log(‘ ’);
          resolve(true);
        },1000);
    });
  runAsync(); 
 }

Promiseオブジェクトにはthen、catchメソッドがあります。これが強みです。

  runAsync().then((data)=>{
    if(data){
      console.log(data)
   }
 })

ionic 3の小さな例です
  // 
myInvite() {
return new Promise((resolve) => {
  this.httpServe.get('invite/myInvite', {
    pageNo: this.pageNo + 1,
    pageSize: 10
    }).then(res => {
      if (res.success) {
        if (this.pageNo == 0) {
          this.list = res.dataWrapper.result.resultList;
          } else {
          this.list = this.list.concat(res.dataWrapper.orders.resultList);
        }
        this.has_next = res.dataWrapper.result.hasNext;
          resolve(true);
        } else {
        resolve(false);
      }
      // console.log(" ", res);
    })
  })
}
//   
doRefresh(refresher) {
  this.currentTime = new Date();
  this.pageNo = 0;
  if (this.pet == 'invite') {
    this.myInvite().then((res) => {
      if (res) {
        refresher.complete();
      }
    }).catch(() => {
      refresher.complete();
    })
  } else if (this.pet == 'income') {
    this.myRevenueRecord().then((res) => {
      if (res) {
        refresher.complete();
      }else{
        refresher.complete();
      }
    }).catch(() => {
      refresher.complete();
    })
  }
}

Promissという文章は詳しく書かれています.