Javascript 如何将期票连成一个函数?
我目前正在学习承诺。为此,我编写了一个音频文件验证程序,用于检查文件的可用性、长度、大小和持续时间。如果一切正常,验证程序将返回true(如果不是false)。我使用四个承诺来管理异步数据的处理。但是,当我使用这四个承诺来检查文件的整体验证时。函数返回undefined,不返回预期的true或false状态Javascript 如何将期票连成一个函数?,javascript,reactjs,Javascript,Reactjs,我目前正在学习承诺。为此,我编写了一个音频文件验证程序,用于检查文件的可用性、长度、大小和持续时间。如果一切正常,验证程序将返回true(如果不是false)。我使用四个承诺来管理异步数据的处理。但是,当我使用这四个承诺来检查文件的整体验证时。函数返回undefined,不返回预期的true或false状态 export function validateAudioFile (Spec, AudioFile) { const fileAndSpecsAvailable = () =>
export function validateAudioFile (Spec, AudioFile) {
const fileAndSpecsAvailable = () => new Promise(resolve => {
var isAvailable;
isAvailable = function() {
if (AudioFile && Spec) {
return true;
}
else {return false}
}
resolve (isAvailable())
})
const meetsDurationSpecs= () => new Promise(resolve => {
var objectURL = URL.createObjectURL(AudioFile);
var convertedAudio = new Audio([objectURL]);
convertedAudio.onloadedmetadata = () => {
var isDurationConfrom
isDurationConfrom = () => {
if (convertedAudio.duration < Spec.duration) {
return true }
else {return false}
}
resolve(isDurationConfrom())
}
})
const meetsFormatSpecs = () => new Promise(resolve => {
var isTypeConform;
isTypeConform = function() {
if (AudioFile.type.includes (Spec.type)){
return true;
}
else {return false}
}
resolve (isTypeConform())
})
const meetsSizeSpecs = () => new Promise(resolve => {
var hasSize;
hasSize= function() {
if (AudioFile.size < Spec.size ){
return true;
}
else {return false}
}
resolve (hasSize())
})
return
// here i chain the promises together
var hello;
hello = () => fileAndSpecsAvailable ()
.then(function(fileAndSpecsAvailable) {
if (fileAndSpecsAvailable === true)
{
console.log("fileAndSpecsAvailable")
meetsFormatSpecs ()
.then(function(meetsFormatSpecs) {
if (meetsFormatSpecs === true) {
console.log("meetsFormatSpecs")
meetsSizeSpecs ()
.then(function(meetsSizeSpecs) {
if (meetsSizeSpecs === true) {
console.log("meetsSizeSpecs")
meetsDurationSpecs ()
.then(function(meetsDurationSpecs) {
if (meetsDurationSpecs === true) {
return true
console.log(meetsDurationSpecs);
}
else {
console.log (meetsDurationSpecs);
return false}
})
}
else {console.log("NotmeetsSizeSpecs"); return false}
})
}
else {return false}
})
} else {return null}
})
console.log (hello ())
}
导出函数验证音频文件(规范、音频文件){
const fileandspecsavaailable=()=>新承诺(解析=>{
var可用;
isAvailable=函数(){
if(音频文件和规范){
返回true;
}
else{return false}
}
解析(isAvailable())
})
const meetsDurationSpecs=()=>新承诺(解决=>{
var objectURL=URL.createObjectURL(音频文件);
var convertedAudio=新音频([objectURL]);
convertedAudio.onloadedmetadata=()=>{
var是从
isDurationConfrom=()=>{
if(转换音频持续时间<规范持续时间){
返回真值}
else{return false}
}
解析(isDurationConfrom())
}
})
const meetsFormatSpecs=()=>新承诺(解析=>{
var是一致的;
isTypeConform=函数(){
if(AudioFile.type.includes(Spec.type)){
返回true;
}
else{return false}
}
解析(isTypeConform())
})
const meetsSizeSpecs=()=>新承诺(解决=>{
var hasSize;
hasSize=函数(){
如果(AudioFile.sizefileAndSpecsAvailable()
.then(函数(fileAndSpecsAvailable){
if(fileandspecsavaailable===true)
{
console.log(“fileandspecsavaailable”)
meetsFormatSpecs()
.then(功能(meetsFormatSpecs){
如果(meetsFormatSpecs===true){
console.log(“meetsFormatSpecs”)
会议规格()
.then(功能(meetsSizeSpecs){
if(meetsSizeSpecs===true){
console.log(“meetsSizeSpecs”)
满足持续时间规范()
.然后(功能(满足持续时间规范){
如果(meetsDurationSpecs===真){
返回真值
控制台日志(满足持续时间规范);
}
否则{
console.log(满足持续时间规范);
返回false}
})
}
else{console.log(“NotmeetsSizeSpecs”);返回false}
})
}
else{return false}
})
}else{return null}
})
console.log(hello())
}