refactor(upload): 简化 #1919 (#1974)

This commit is contained in:
morning-star 2024-06-05 20:58:47 +08:00 committed by GitHub
parent 537748e499
commit c32e65b944
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 27 additions and 19 deletions

View File

@ -389,35 +389,36 @@ before: function(obj){ // obj 参数同 choose
*/ */
} }
// 返回 jQuery Deferred.promise 对象或 JS 原生 Promise 对象reject 表明阻止上传(2.9.11+) // 返回 jQuery Deferred 对象或 JS 原生 Promise 对象,false 或 Promise.reject 表明阻止上传(2.9.11+)
// Promise // Promise
/** @type {(obj: object) => boolean | JQueryDeferred<boolean> | Promise<boolean>} */
before: function(obj){ before: function(obj){
return new Promise(function(resolve, reject){ return new Promise(function(resolve, reject){
setTimeout(function(){ setTimeout(function(){
console.log('before_async_task', obj); console.log('before_async_task', obj);
resolve(); resolve(true);
}, 1000) }, 1000)
}) })
} }
// Deferred // Deferred
before: function(obj){ before: function(obj){
return $.Deferred(function(deferred){ return $.Deferred(function(defer){
setTimeout(function(){ setTimeout(function(){
console.log('before_async_task', obj); console.log('before_async_task', obj);
deferred.resolve(); defer.resolve(true);
}, 1000) }, 1000)
}).promise(); }).promise();
} }
// Deferred2 // Deferred2
before: function(obj){ before: function(obj){
var deferred = $.Deferred(); var defer = $.Deferred();
setTimeout(function(){ setTimeout(function(){
console.log('before_async_task', obj); console.log('before_async_task', obj);
deferred.resolve(); defer.resolve(true);
}, 1000) }, 1000)
return deferred.promise(); return defer.promise();
} }
``` ```

View File

@ -471,20 +471,14 @@ layui.define(['lay', 'layer'], function(exports){
} }
// 上传前的回调 - 如果回调函数明确返回 false 或 Promise.reject则停止上传 // 上传前的回调 - 如果回调函数明确返回 false 或 Promise.reject则停止上传
if(typeof options.before === 'function'){ if(typeof options.before === 'function'){
var maybePromise = options.before(args); upload.util.promiseLikeResolve(options.before(args))
if(maybePromise === false){ .then(function(result){
return; if(result !== false){
}else if(typeof maybePromise === 'object' && typeof maybePromise.then === 'function'){
// 兼容 jQuery Deferred Promise 对象和原生 Promise 对象
// 类型检测不够完善,但足以满足此场景
maybePromise.then(function(result){
ready();
}, function(error){
layui.hint().error(error);
})
}else{
ready(); ready();
} }
}, function(error){
error !== undefined && layui.hint().error(error);
})
}else{ }else{
ready(); ready();
} }
@ -781,6 +775,19 @@ layui.define(['lay', 'layer'], function(exports){
size = formatSize / Math.pow(1024, index); size = formatSize / Math.pow(1024, index);
size = size % 1 === 0 ? size : parseFloat(size.toFixed(precision));//保留的小数位数 size = size % 1 === 0 ? size : parseFloat(size.toFixed(precision));//保留的小数位数
return size + unitArr[index]; return size + unitArr[index];
},
/**
* 将给定的值转换为一个 JQueryDeferred 对象
*/
promiseLikeResolve:function(value){
var deferred = $.Deferred();
if(value && typeof value.then === 'function'){
value.then(deferred.resolve, deferred.reject);
}else{
deferred.resolve(value);
}
return deferred.promise();
} }
} }