本文主要說一下Promise,Prepending(進(jìn)行時(shí)),Resolve(成功了),Reject(失敗了),then在小程序中的實(shí)際應(yīng)用
關(guān)于promise的介紹什么的就不說了網(wǎng)上一搜一大堆,這里只說他的實(shí)際應(yīng)用的代碼
var promise = new Promise(function(resolve, reject) {
// ... some code
if (/* 異步操作成功 */){
resolve(value);
} else {
reject(error);
}
});
上面給出的是promise的寫法我們一般寫的時(shí)候會(huì)在一個(gè)方法中去寫,下面我就貼出他的實(shí)際應(yīng)用的代碼(需要往下傳遞參數(shù)的寫法)
App({
onLaunch: function () {
this.xuexi();
},
xuexi:function(){
this.test()
.then(jj =>{
//這里是將test方法中resolve返回值賦值給下一個(gè)方法,
//在這里可以對(duì)數(shù)據(jù)進(jìn)行判斷是否繼續(xù)進(jìn)行
return this.runAsync1(jj);
})
.then(hh =>{
//這里是將runAsync1方法中resolve返回值賦值給下一個(gè)方法
return this.runAsync2(hh);
})
.then(mm =>{
//這里是將runAsync2方法中resolve返回值賦值給下一個(gè)方法
this.runAsync3(mm);
})
}
test: function(){
var p = new Promise(function (resolve, reject) {
setTimeout(function () {
//注意:一旦你把promise的狀態(tài)定義了哪他的狀態(tài)就不會(huì)再改變.
//比如我這里先寫的resolve下面又跟著寫了reject,
//reject的代碼會(huì)執(zhí)行但是promise的狀態(tài)是不會(huì)變的就是reject
resolve("調(diào)用成功");
reject("調(diào)用失敗");
}, 5000);
})
return p;
},
runAsync1 :function(jj){
var p = new Promise(function (resolve, reject) {
//做一些異步操作
setTimeout(function () {
console.log(jj);
resolve("測(cè)試的數(shù)據(jù)1");
}, 3000);
});
return p;
},
runAsync2: function (hh) {
var p = new Promise(function (resolve, reject) {
//做一些異步操作
setTimeout(function () {
console.log(hh);
resolve('隨便什么數(shù)據(jù)2');
}, 2000);
});
return p;
},
runAsync3: function (mm) {
var p = new Promise(function (resolve, reject) {
//做一些異步操作
setTimeout(function () {
console.log(mm);
// resolve('隨便什么數(shù)據(jù)6');
}, 2000);
});
return p;
},
})
不需要傳遞參數(shù)的寫法就是等待一個(gè)完成了就進(jìn)行下一個(gè)的寫法
App({
onLaunch: function () {
this.xuexi();
},
xuexi:function(){
//只是等待上一個(gè)完成后就進(jìn)行下一個(gè)不關(guān)心上一個(gè)的狀態(tài),沒有數(shù)據(jù)的交互
this.test()
.then(this.runAsync1);
.then(this.runAsync2);
.then(this.runAsync3);
}
test: function(){
var p = new Promise(function (resolve, reject) {
setTimeout(function () {
//注意:一旦你把promise的狀態(tài)定義了哪他的狀態(tài)就不會(huì)再改變.
//比如我這里先寫的resolve下面又跟著寫了reject,reject的代碼會(huì)執(zhí)行但是promise的狀態(tài)是不會(huì)變的就是reject
resolve("調(diào)用成功");
reject("調(diào)用失敗");
}, 5000);
})
return p;
},
runAsync1 :function(jj){
var p = new Promise(function (resolve, reject) {
//做一些異步操作
setTimeout(function () {
console.log(jj);
resolve("測(cè)試的數(shù)據(jù)1");
}, 3000);
});
return p;
},
runAsync2: function (hh) {
var p = new Promise(function (resolve, reject) {
//做一些異步操作
setTimeout(function () {
console.log(hh);
resolve('隨便什么數(shù)據(jù)2');
}, 2000);
});
return p;
},
runAsync3: function (mm) {
var p = new Promise(function (resolve, reject) {
//做一些異步操作
setTimeout(function () {
console.log(mm);
// resolve('隨便什么數(shù)據(jù)6');
}, 2000);
});
return p;
},
})
建議一個(gè)promise后面跟隨一個(gè)catch去捕捉promise內(nèi)部產(chǎn)生的錯(cuò)誤
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。