uniapp很多api都是異步的,而非同步(asyn),舉個例子來說
例子1:
付款步驟:1、2、3,而實際運行可能是1、3、2...

例子2:
通過回調深淵解決它異步問題

例子3:
uniapp內置了async/await,這個的確很棒(封裝了request請求情況就會好很多)- 它們有條不紊的進行着

但是請思考,uniapp那么多api且很多都是異步的!!! 因此把它們api promise化是必須的(同步)
1.復制並且命名它
uniPromise.js
export default (callback) => {
return (object = {}) => {
return new Promise((resolve, reject) => {
object.success = (...args) => {
resolve(...args)
};
object.fail = (...args) => {
reject(...args)
};
object.complete = () => {}
callback(object)
})
}
};
2.main.js 導入全局
import uniPromise from './uniPormis.js' Vue.prototype.$uni = uniPromise;
3.使用它
index.vue
<template>
<view>
uniPromise
</view>
</template>
<script>
export default {
data() {
return {}
},
components: {},
onLoad() {
// 示例1
this.$uni(uni.getSystemInfo)().then(res => {
console.log(res)
})
.then(()=> this.$uni(uni.showToast)({
title:'hello'
}))
.then(() => this.$uni(uni.showLoading)({
title: '正在保存'
}))
.then(()=> this.$uni(uni.hideLoading)())
.then(()=> this.$uni(uni.showModal)({
title: 'hello',
content: 'babbabab',
showCancel: false,
cancelText: '取消',
confirmText: '確定'
}))
.then(res=>{
if(res.confirm){
console.log('按了確定')
}else{
console.log('按了取消')
}
})
// uni.showModal({
// title: '',
// content: '',
// showCancel: false,
// cancelText: '',
// confirmText: '',
// success: res => {},
// fail: () => {},
// complete: () => {}
// });
// 示例2
// this.$uni(uni.showModal)({
// title: 'uniPromise'
// })
// .then(res => {
// console.log(res)
// if (res.cancel) {
// // 中斷本次運行
// console.warn('中斷本次運行... 出問題了')
// return Promise.reject('這里填寫出錯的原因,並且中斷它');
// }
// })
// .catch(res=>{
// console.log('捕獲以后還能運行.. 不捕獲直接中斷',res);
// })
// .then(() => this.$uni(uni.showLoading)({
// title: '正在保存'
// }))
// .then(() =>{
// sleep(3000);
// console.log('這里延遲了3s')
// })
// .then(() => this.$uni(uni.hideLoading)());
},
mounted() {},
methods: {}
}
const sleep = numberMillis => {
let now = new Date();
let exitTime = now.getTime() + numberMillis;
while (true) {
now = new Date();
if (now.getTime() > exitTime)
return;
}
}
</script>
<style>
</style>
