es6Promise及小程序Promise用法


本文主要說一下Promise,Prepending(進行時),Resolve(成功了),Reject(失敗了),then在小程序中的實際應用

關於promise的介紹什么的就不說了網上一搜一大堆,這里只說他的實際應用的代碼

var promise = new Promise(function(resolve, reject) {
  // ... some code
  if (/* 異步操作成功 */){
    resolve(value);
  } else {
    reject(error);
  }
});
上面給出的是promise的寫法我們一般寫的時候會在一個方法中去寫,下面我就貼出他的實際應用的代碼(需要往下傳遞參數的寫法)
App({
  onLaunch: function () {
    this.xuexi();
  },
  xuexi:function(){
     this.test()
     .then(jj =>{
       //這里是將test方法中resolve返回值賦值給下一個方法,
       //在這里可以對數據進行判斷是否繼續進行
       return this.runAsync1(jj);
     })
     .then(hh =>{
       //這里是將runAsync1方法中resolve返回值賦值給下一個方法
       return this.runAsync2(hh);
     })
     .then(mm =>{
       //這里是將runAsync2方法中resolve返回值賦值給下一個方法
       this.runAsync3(mm);
     })
  }

  test: function(){
    var p = new Promise(function (resolve, reject) {
      setTimeout(function () {
      //注意:一旦你把promise的狀態定義了哪他的狀態就不會再改變.
      //比如我這里先寫的resolve下面又跟着寫了reject,
      //reject的代碼會執行但是promise的狀態是不會變的就是reject
        resolve("調用成功");
        reject("調用失敗"); 
      }, 5000);
    })
    return p;
  },
  
  runAsync1 :function(jj){
    var p = new Promise(function (resolve, reject) {
      //做一些異步操作
      setTimeout(function () {
        console.log(jj);
        resolve("測試的數據1");
      }, 3000);
    });
    return p;
  },
  runAsync2: function (hh) {
      var p = new Promise(function (resolve, reject) {
        //做一些異步操作
        setTimeout(function () {
          console.log(hh);
          resolve('隨便什么數據2');
        }, 2000);
      });
      return p;
    },
    runAsync3: function (mm) {
      var p = new Promise(function (resolve, reject) {
        //做一些異步操作
        setTimeout(function () {
          console.log(mm);
          // resolve('隨便什么數據6');
        }, 2000);
      });
      return p;
    },
})
不需要傳遞參數的寫法就是等待一個完成了就進行下一個的寫法
App({
  onLaunch: function () {
    this.xuexi();
  },
  xuexi:function(){
     //只是等待上一個完成后就進行下一個不關心上一個的狀態,沒有數據的交互
     this.test()
     .then(this.runAsync1);
     .then(this.runAsync2);
     .then(this.runAsync3);
  }

  test: function(){
    var p = new Promise(function (resolve, reject) {
      setTimeout(function () {
      //注意:一旦你把promise的狀態定義了哪他的狀態就不會再改變.
      //比如我這里先寫的resolve下面又跟着寫了reject,reject的代碼會執行但是promise的狀態是不會變的就是reject
        resolve("調用成功");
        reject("調用失敗"); 
      }, 5000);
    })
    return p;
  },
  
  runAsync1 :function(jj){
    var p = new Promise(function (resolve, reject) {
      //做一些異步操作
      setTimeout(function () {
        console.log(jj);
        resolve("測試的數據1");
      }, 3000);
    });
    return p;
  },
  runAsync2: function (hh) {
      var p = new Promise(function (resolve, reject) {
        //做一些異步操作
        setTimeout(function () {
          console.log(hh);
          resolve('隨便什么數據2');
        }, 2000);
      });
      return p;
    },
    runAsync3: function (mm) {
      var p = new Promise(function (resolve, reject) {
        //做一些異步操作
        setTimeout(function () {
          console.log(mm);
          // resolve('隨便什么數據6');
        }, 2000);
      });
      return p;
    },
})

 

建議一個promise后面跟隨一個catch去捕捉promise內部產生的錯誤

 

 參考 : https://www.cnblogs.com/fps2tao/p/10141187.html

轉: https://www.jianshu.com/p/acbc8986903a

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM