本文主要說一下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