dy_card
Version:
Quickapp Sample Template
91 lines (85 loc) • 2.2 kB
JavaScript
/**
* 封装了一些网络请求方法,方便通过 Promise 的形式请求接口
*/
import $fetch from '@system.fetch'
import $utils from './utils'
const TIMEOUT = 20000
Promise.prototype.finally = function(callback) {
const P = this.constructor
return this.then(
value => P.resolve(callback()).then(() => value),
reason =>
P.resolve(callback()).then(() => {
throw reason
})
)
}
/**
* 调用快应用 fetch 接口做网络请求
* @param params
*/
function fetchPromise(params) {
return new Promise((resolve, reject) => {
$fetch
.fetch({
url: params.url,
method: params.method,
data: params.data
})
.then(response => {
const result = response.data
const content = JSON.parse(result.data)
/* @desc: 可跟具体不同业务接口数据,返回你所需要的部分,使得使用尽可能便捷 */
content.success ? resolve(content.value) : resolve(content.message)
})
.catch((error, code) => {
console.log(`🐛 request fail, code = ${code}`)
reject(error)
})
.finally(() => {
console.log(`✔️ request @${params.url} has been completed.`)
resolve()
})
})
}
/**
* 处理网络请求,timeout 是网络请求超时之后返回,默认 20s 可自行修改
* @param params
*/
function requestHandle(params, timeout = TIMEOUT) {
try {
return Promise.race([
fetchPromise(params),
new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error('网络状况不太好,再刷新一次?'))
}, timeout)
})
])
} catch (error) {
console.log(error)
}
}
export default {
post: function(url, params) {
return requestHandle({
method: 'post',
url: url,
data: params
})
},
get: function(url, params) {
return requestHandle({
method: 'get',
url: $utils.queryString(url, params)
})
},
put: function(url, params) {
return requestHandle({
method: 'put',
url: url,
data: params
})
}
// 如果,method 您需要更多类型,可自行添加更多方法;
}