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
/** @type {(obj: object) => boolean | JQueryDeferred<boolean> | Promise<boolean>} */
before: function(obj){
return new Promise(function(resolve, reject){
setTimeout(function(){
console.log('before_async_task', obj);
resolve();
resolve(true);
}, 1000)
})
}
// Deferred
before: function(obj){
return $.Deferred(function(deferred){
return $.Deferred(function(defer){
setTimeout(function(){
console.log('before_async_task', obj);
deferred.resolve();
defer.resolve(true);
}, 1000)
}).promise();
}
// Deferred2
before: function(obj){
var deferred = $.Deferred();
var defer = $.Deferred();
setTimeout(function(){
console.log('before_async_task', obj);
deferred.resolve();
defer.resolve(true);
}, 1000)
return deferred.promise();
return defer.promise();
}
```

View File

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