我想通过await使用jselect同步获取音频持续时间. 我想按照以下顺序获取alert 消息:

   111 
   222 leng=1.549188
   333 duration=1.549188 
   444 

但我得到的是同步命令:

   111 
   333 duration=9999 
   444 
   222 leng=1.549188 

如何修复它?

var duration = 99999 ; 

async function getAudioUrlDuration(src, callBackFun) {
    var audio = new Audio();
    audio.src = src;
    await $(audio).on("loadedmetadata", function(){
        callBackFun( audio.duration );
        duration = audio.duration ;
    });
}
function callBackFun3(leng){ 
    alert('222 leng='+leng) ; 
}
var src = "https://www.w3schools.com/tags/horse.mp3" ;

async function aaa(){
  alert(111);
  await getAudioUrlDuration(src, callBackFun3 )  ; 
  alert( '333  duration='+duration ) ; 
  alert(444);
} 
 
 aaa();

推荐答案

问题是jQueryon函数不会返回await的promise ,您需要打开getAudioUrlDuration函数返回一个promise ,该promise 将在on回调成功时解决.

var duration = 99999; 
async function getAudioUrlDuration(src) {
    var audio = new Audio();
    audio.src = src;
    // Return a promise that resolves when the loadedmetadata event is triggered
    return new Promise((resolve) => {
        $(audio).on("loadedmetadata", function(){
            duration = audio.duration;
            resolve(audio.duration);
        });
    });
}

function callBackFun3(leng){ 
    alert('222 leng=' + leng); 
}

var src = "https://www.w3schools.com/tags/horse.mp3";

async function aaa(){
    alert(111);
    var audioDuration = await getAudioUrlDuration(src);
    callBackFun3(audioDuration);  
    alert('333 duration=' + duration); 
    alert(444);
}

aaa();

Javascript相关问答推荐

如何在基本计算器中添加不含eval的数学函数

JavaScript setSYS()是否有可能更早触发?

文件阅读器未读取一个文件

为什么在react js中没有调用加载器函数?

在JavaScript中打开和关闭弹出窗口

在JavaScript中,如何将请求的回调函数的结果合并到运行的代码中?

添加/删除时React图像上传重新渲染上传的图像

foreach循环中的Typescript字符串索引

是什么原因导致此Angular 16应用程序中类型错误时属性结果不存在?

materialized - activeIndex返回-1

硬币兑换运行超时

Mongoose post hook在使用await保存时不返回Postman响应

为什么Mutations 观察器用微任务队列而不是macrotask队列处理?

如何将react—flanet map添加到remixjs应用程序

为什么我的导航条打开状态没有在窗口addeventlistener(Reaction Js)中更新?

如何在ASP.NET中使用Google Charts API JavaScript将条形图标签显示为绝对值而不是负值

VSCode中出现随机行

在JS/TS中将复杂图形转换为数组或其他数据 struct

Django导入问题,无法导入我的应用程序,但我已在设置中安装了它

有没有办法通过使用不同数组中的值进行排序