el-upload的before-upload中请求写法
错误写法
beforeUpload(file) {policy().then(response => {return true; // 这个return仅针对.then()内部的回调函数}).catch(() => {return false; // 这个return仅针对.catch()内部的回调函数});// 整个beforeUpload函数没有显式返回语句,默认返回undefined
}
//无效!这个true不会被el-upload接收 函数默认返回undefined → 立即上传
正确写法
beforeUpload(file) {return policy().then(response => {// 设置上传参数...return true; // 这个true会被包裹在Promise中返回给el-upload}).catch(() => {return false; // 这个false会被包裹在Promise中返回给el-upload});
}
正确写法
beforeUpload: async function(file) {try {const response = await policy();// 设置参数...return true;} catch (error) {return false;}
}
正确写法beforeUpload(file) {let _self = this;return new Promise((resolve, reject) => {policy().then(response => {console.log("响应的数据",response);_self.dataObj.policy = response.data.policy;_self.dataObj.signature = response.data.signature;_self.dataObj.ossaccessKeyId = response.data.accessid;_self.dataObj.key = response.data.dir +getUUID()+'_${filename}';_self.dataObj.dir = response.data.dir;_self.dataObj.host = response.data.host;console.log("响应的数据222。。。",_self.dataObj);resolve(true)}).catch(err => {reject(false)})})}
是因为 beforeUpload 钩子需要返回一个 Promise 或同步值来控制上传流程,但你的错误代码没有正确返回任何有效结果
beforeUpload 的返回值决定上传流程:
如果返回 undefined(无返回值),el-upload 会默认允许上传
你的代码中,policy().then().catch() 是一个独立的 Promise 链,但没有被返回给 beforeUpload
异步操作与同步返回的矛盾:
policy() 是异步请求,beforeUpload 函数会立即执行完毕并返回 undefined
无论 policy() 成功还是失败,其结果都无法影响 beforeUpload 的返回值
因此,文件会立即上传,而不会等待凭证获取完成