on
не возвращает обещание.Вы можете дать себе обещание, подобное этому:
Promise.all($("video").map(function() {
return new Promise(resolve => {
$(this).one("loadedmetadata", resolve);
});
})).then(() => {
console.log(getMaxVideoLength());
});
Или, если вам нужно придерживаться ES5 и использовать jQuery's Deferred:
$.when.apply($, $("video").map(function() {
var d = $.Deferred();
$(this).one("loadedmetadata", d.resolve.bind(d));
return d.promise();
})).done(function() {
console.log(getMaxVideoLength());
});
Примечание: в приведенном вышеЯ исправил написание getMaxVideoLength
(это th
, а не ht
, в конце).