這裏放上個人覺得最舒服的一種Promise化方式:
在utils裏面新建文件Promise.js
//Promise.js
function wxPromise(functionName, params) {
return new Promise(function(resolve, reject) {
wx[functionName]({
...params,
success: resolve,
fail: reject
})
})
}
function login(params = {}) {
return wxPromise('login', params);
}
function getSetting(params = {}) {
return wxPromise('getSetting', params);
}
function request(params = {}) {
return wxPromise('request', params);
}
module.exports = {
login,
getSetting,
request,
}
然後在需要用到的Page頁面或者App頁面裏面進行導入:
//somepage.js
var wxP = require('../../utils/Promise.js');
Page({
onLoad(options) {
wxP.getSetting({
withSubscriptions: true
})
.then(res =>{ //接收調用getSetting返回的響應
if(res.authSetting['scope.userInfo']){
return wxP.login({})
}
})
.then(res =>{ //接收調用login返回的響應
return wxP.request({
url: 'www.YulRW.com',
method: "POST",
data: {
data: 'something'
}
})
})
.then(res =>{ //接收調用request返回的響應
console.log(res);
})
},
})
更新 ↓
注意,現在的小程序已經可以支持API的Promise化了,需用npm包構建,下面貼出使用過程:
首先要先安裝npm,不知道npm的可以去網上搜索安裝過程。然後進行一下操作
- npm初始化
npm init -y
- 安裝小程序的Promise包
npm install --save miniprogram-api-promise
-
在小程序開發工具中構建npm
-
配置使用
在小程序的入口文件app.js
中加入一下代碼:
//app.js
//引入安裝的包
import { promisifyAll, promisify } from 'miniprogram-api-promise';
const wxp = {}
// 對小程序api接口全部Promise化
promisifyAll(wx, wxp)
console.log(wxp.getSystemInfoSync())
wxp.getSystemInfo().then(console.log)
wxp.showModal().then(wxp.openSetting())
// 兼容性:既可以Promise寫法,又可以用回調函數寫法(success、fail、complete回調函數)
wxp.getSystemInfo({success(res) {console.log(res)}})
// 小程序單個api的promise使用
promisify(wx.getSystemInfo)().then(console.log)
另外,其他詳情請看微信官方文檔:
小程序Promise
過程中有任何不懂得或者有疑問得歡迎留言,我儘量及時回覆