智能照明系统APP-本地串口
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
LightingSystemApp-serial/.svn/pristine/f4/f426011b75bfd7d0396ac2fa106...

98 lines
1.9 KiB

3 years ago
import {
invoke
} from 'uni-core/service/bridge'
import {
onMethod,
invokeMethod
} from '../../platform'
class UploadTask {
constructor (uploadTaskId, callbackId) {
this.id = uploadTaskId
this._callbackId = callbackId
this._callbacks = []
}
abort () {
invokeMethod('operateUploadTask', {
uploadTaskId: this.id,
operationType: 'abort'
})
}
onProgressUpdate (callback) {
if (typeof callback !== 'function') {
return
}
this._callbacks.push(callback)
}
onHeadersReceived () {
}
offProgressUpdate (callback) {
const index = this._callbacks.indexOf(callback)
if (index >= 0) {
this._callbacks.splice(index, 1)
}
}
offHeadersReceived () {
}
}
const uploadTasks = Object.create(null)
onMethod('onUploadTaskStateChange', ({
uploadTaskId,
state,
data,
statusCode,
progress,
totalBytesSent,
totalBytesExpectedToSend,
errMsg
}) => {
const uploadTask = uploadTasks[uploadTaskId]
const callbackId = uploadTask._callbackId
switch (state) {
case 'progressUpdate':
uploadTask._callbacks.forEach(callback => {
callback({
progress,
totalBytesSent,
totalBytesExpectedToSend
})
})
break
case 'success':
invoke(callbackId, {
data,
statusCode,
errMsg: 'request:ok'
})
// eslint-disable-next-line no-fallthrough
case 'fail':
invoke(callbackId, {
errMsg: 'request:fail ' + errMsg
})
// eslint-disable-next-line no-fallthrough
default:
// progressUpdate 可能晚于 success
setTimeout(() => {
delete uploadTasks[uploadTaskId]
}, 100)
break
}
})
export function uploadFile (args, callbackId) {
const {
uploadTaskId
} = invokeMethod('createUploadTask', args)
const task = new UploadTask(uploadTaskId, callbackId)
uploadTasks[uploadTaskId] = task
return task
}